summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfpages
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/pdfpages
Initial commit
Diffstat (limited to 'macros/latex/contrib/pdfpages')
-rw-r--r--macros/latex/contrib/pdfpages/README45
-rw-r--r--macros/latex/contrib/pdfpages/dummy-l.pdfbin0 -> 12470 bytes
-rw-r--r--macros/latex/contrib/pdfpages/dummy.pdfbin0 -> 30894 bytes
-rw-r--r--macros/latex/contrib/pdfpages/pdfpages.dtx5084
-rw-r--r--macros/latex/contrib/pdfpages/pdfpages.ins99
-rw-r--r--macros/latex/contrib/pdfpages/pdfpages.pdfbin0 -> 292932 bytes
6 files changed, 5228 insertions, 0 deletions
diff --git a/macros/latex/contrib/pdfpages/README b/macros/latex/contrib/pdfpages/README
new file mode 100644
index 0000000000..923d56bcf4
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/README
@@ -0,0 +1,45 @@
+
+The pdfpages Package
+--------------------
+
+This package simplifies the insertion of external multi-page PDF
+documents into LaTeX documents. Pages can be freely selected and
+similar to psnup it is possible to put several logical pages onto
+each sheet of paper. Furthermore a lot of hypertext features like
+hyperlinks and article threads are provided. This package supports
+pdfTeX, VTeX, and XeTeX. With VTeX it is even possible to use
+this package to insert PostScript files, in addition to PDF files.
+
+
+INSTALLATION:
+
+An easy way to install this package is to download the TDS-packaged
+zip file form
+
+ CTAN:install/macros/latex/contrib/pdfpages.tds.zip
+
+and to unzip this file into your TeX-tree, e.g.:
+
+ unzip -d /usr/local/TL2008/texmf-local/ pdfpages.tds.zip
+
+That's all you have to do.
+
+
+Only if you want to extract and install the files manually, proceed
+as follows:
+
+ * Run `latex pdfpages.ins' to produce the LaTeX files
+ * Run `latex pdfpages.dtx' to produce the documentation
+ * Move the files into appropriate directories searched by LaTeX.
+
+
+LICENSE:
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3c of this
+license or (at your option) any later version.
+The latest version of this license is in
+ <http://www.latex-project.org/lppl.txt>.
+
+
+ Andreas MATTHIAS
diff --git a/macros/latex/contrib/pdfpages/dummy-l.pdf b/macros/latex/contrib/pdfpages/dummy-l.pdf
new file mode 100644
index 0000000000..5d4ad9de0b
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/dummy-l.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfpages/dummy.pdf b/macros/latex/contrib/pdfpages/dummy.pdf
new file mode 100644
index 0000000000..8f9c259446
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/dummy.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfpages/pdfpages.dtx b/macros/latex/contrib/pdfpages/pdfpages.dtx
new file mode 100644
index 0000000000..35f1ff86cd
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/pdfpages.dtx
@@ -0,0 +1,5084 @@
+%
+% \iffalse
+%
+%<*(package,pppdftexdef,ppluatexdef,ppvtexdef,ppxetexdef,ppdvipsdef,ppdvipdfmxdef,ppnulldef)>
+%% Copyright (C) 2001-2017 Andreas MATTHIAS
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% <http://www.latex-project.org/lppl.txt>.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is
+%% Andreas Matthias <andreas.matthias@gmail.com>.
+%
+%</(package,pppdftexdef,ppluatexdef,ppvtexdef,ppxetexdef,ppdvipsdef,ppdvipdfmxdef,ppnulldef)>
+%<*!installer>
+%%
+%% Please send error reports and suggestions for improvements to
+%% Andreas MATTHIAS <andreas.matthias@gmail.com>.
+%</!installer>
+%%
+%
+%<*!(example1,example2,example3,installer)>
+%<*dtx>
+\makeatletter
+%</dtx>
+\def\AM@fileversion{v0.5l}
+\def\AM@Git@Date@process$#1: #2 #3${\AM@Git@Date@process@i#2\END}
+\def\AM@Git@Date@process@i#1-#2-#3\END{\def\AM@Git@Date{#1/#2/#3}}
+\def\AM@Git@SHA@process$#1: #2${\def\AM@Git@SHA{#2}}
+\AM@Git@Date@process$Date: 2017-10-31 14:12:08 +0100 $
+\AM@Git@SHA@process$SHA-1: 9deefd6c8c22356ce47773245098390089885925 $
+%</!(example1,example2,example3,installer)>
+%
+%
+%<*dtx>
+\ProvidesFile{pdfpages.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{pdfpages}
+%<pppdftexdef>\ProvidesFile{pppdftex.def}
+%<ppluatexdef>\ProvidesFile{ppluatex.def}
+%<ppvtexdef>\ProvidesFile{ppvtex.def}
+%<ppxetexdef>\ProvidesFile{ppxetex.def}
+%<ppdvipsdef>\ProvidesFile{ppdvips.def}
+%<ppdvipdfmxdef>\ProvidesFile{ppdvipdfmx.def}
+%<ppnulldef>\ProvidesFile{ppnull.def}
+%<driver>\ProvidesFile{pdfpages.drv}
+%<*!(example1,example2,example3,installer)>
+% \fi
+%
+% \makeatletter
+% \ProvidesFile{pdfpages.dtx}
+ [\AM@Git@Date\space\AM@fileversion\space
+%
+% \iffalse
+%</!(example1,example2,example3,installer)>
+%<*none>
+% \fi
+]
+% \makeatother
+% \iffalse
+%</none>
+%<*!(example1,example2,example3,installer)>
+%<*dtx>
+\makeatother
+%</dtx>
+%</!(example1,example2,example3,installer)>
+%
+%<package> Insert pages of external PDF documents (AM)]
+%<pppdftexdef> Pdfpages driver for pdfTeX (AM)]
+%<ppluatexdef> Pdfpages driver for LuaTeX (AM)]
+%<ppvtexdef> Pdfpages driver for VTeX (AM)]
+%<ppxetexdef> Pdfpages driver for XeTeX (AM)]
+%<ppdvipsdef> Pdfpages driver for dvips (AM)]
+%<ppdvipdfmxdef> Pdfpages driver for dvipdfmx (AM)]
+%<ppnulldef> Pdfpages dummy driver (AM)]
+%
+%
+% \fi
+%
+% \GetFileInfo{pdfpages.dtx}
+%
+% \CheckSum{4930}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{array}
+\usepackage{graphicx}
+\usepackage{cmap}
+\usepackage{hypdoc}
+\hypersetup{colorlinks, linkcolor=blue, pdfstartview={Fit},
+ bookmarksopenlevel=1, bookmarksnumbered=false}
+\OnlyDescription
+\begin{document}
+ \DocInput{pdfpages.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \newcommand*{\versionlist}{%
+% \setlength{\topsep}{0pt}%
+% \setlength{\itemsep}{0pt}%
+% \setlength{\leftmargin}{20pt}%
+% \setlength{\parsep}{0pt}}
+% \newcommand{\marginstyle}
+% {\raggedleft\itshape\small}
+%
+% \def\pdfTeX{pdfTeX}
+% \def\pdfLaTeX{pdfLaTeX}
+% \def\luaTeX{LuaTeX}
+% \def\VTeX{VTeX}
+% \def\XeTeX{XeTeX}
+% \def\dvips{dvips}
+% \def\dvipdfmx{dvipdfmx}
+% \def\pTeX{pTeX}
+% \def\PDF{{\small PDF}}
+% \def\PS{{\small PS}}
+% \def\DVI{{\small DVI}}
+%
+% \pdfstringdefDisableCommands{%
+% \def\pdfTeX{pdfTeX}%
+% \def\luaTeX{LuaTeX}%
+% \def\VTeX{VTeX}%
+% \def\XeTeX{XeTeX}%
+% }
+%
+% \makeatletter
+% \title{The \textsf{pdfpages} Package\thanks{This file
+% has version number \AM@fileversion, last revised \AM@Git@Date.}}
+% \author{Andreas \textsc{Matthias}\\
+% \href{mailto:andreas.matthias@gmail.com}{andreas.matthias@gmail.com}}
+% \date{\AM@Git@Date}
+% \makeatother
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% This package simplifies the insertion of external multi-page \PDF\
+% or \PS\ documents. It supports \pdfTeX, \VTeX, \XeTeX, \luaTeX, and
+% \pTeX.
+% \end{abstract}
+%
+% \tableofcontents
+%
+%
+% \section{Introduction}
+% When creating \PDF\ documents, it is sometimes useful to insert pages
+% of external \PDF\ documents. This can be done with the
+% |\includegraphics| command from the \texttt{graphics} package. But a
+% simple |\includegraphics{doc.pdf}| normally produces `|Overfull \hbox|'
+% and `|Overfull \vbox|' warnings, because the size of the inserted pages
+% does not match the print space.
+%
+% The |pdfpages| package makes it easy to insert pages of external \PDF\
+% documents without worrying about the print space. Here are some
+% features of the |pdfpages| package: Several logical pages can be
+% arranged onto each sheet of paper and the layout can be changed
+% individually. A lot of hypertext operations are supported, like links
+% to the inserted pages, links to the original \PDF\ document, threads,
+% etc. When working with \VTeX\ the same is possible with PostScript
+% documents, too. Note that PostScript documents are only supported by
+% \VTeX\ and \emph{not} by \pdfLaTeX.
+%
+% When producing \DVI\ output |pdfpages| cannot insert pages of a \PDF\
+% documents. But instead of interrupting execution |pdfpages| will insert
+% empty pages. This feature is important when using packages like
+% |pst-pdf|, which need to produce \DVI\ output at the first run.
+%
+% \paragraph{Links and other interactive features of PDF documents}
+% When including pages of a PDF only the so called content stream of
+% these pages is copied but no links. Up to now there are no TeX-engines
+% (\pdfTeX, \XeTeX, \ldots) available that can copy links or other
+% interactive features of a PDF document, too. Thus, all kinds of
+% links\footnote{Actually not only links but all kinds of \emph{PDF
+% annotations} will get lost.} will get lost during
+% inclusion. (Using |\includepdf|, |\includegraphics|, or other low-level
+% commands.)
+%
+% However, there's a glimmer of hope. Some links may be extracted and later
+% reinserted by a package called \emph{pax} which can be downloaded from
+% CTAN \cite{pax}. Have a look at it!
+%
+%
+% \section{Usage}
+% \subsection{Package Options}
+%
+% \begin{minipage}{\linewidth}
+% |\usepackage[|\meta{options}|]{pdfpages}|
+%
+% \begin{quote}
+% \meta{option} --
+% \begin{minipage}[t]{.8\linewidth}
+% \setlength\leftmargini{3.5em}
+% \begin{description}
+% \setlength\itemsep{0pt}
+% \item[|final|:] Inserts pages. This is the default.
+% \item[|draft|:] Does not insert pages, but prints a box
+% and the filename instead.
+% \item[|demo|:] Inserts empty pages instead of the actual PDFs.
+% \item[|nodemo|:] Disables `demo'.
+% \item[|enable-survey|:] Activates survey functionalities.
+% (\emph{experimental, subject to change})
+% \end{description}
+% \end{minipage}
+% \end{quote}
+% \end{minipage}
+%
+%
+% \subsection{Commands}
+%
+% \DescribeMacro{\includepdf}
+% Inserts pages of an external \PDF\ document.
+%
+% \medskip\noindent
+% \begin{minipage}{\linewidth}
+% |\includepdf[|\meta{key=val}|]{|\meta{filename}|}|
+%
+% \begin{quote}
+% \begin{tabular}{@{}l@{\,--~}>{\raggedright}p{.8\linewidth}}
+% \meta{key=val} & A comma separated list of options
+% using the \meta{key}=\meta{value} syntax.
+% \tabularnewline[.25\baselineskip]
+% \meta{filename} & Filename of the \PDF\ document. (The
+% filename \emph{must not} contain any blanks!)
+% \end{tabular}
+% \end{quote}
+% \end{minipage}\bigskip
+%
+%
+% \noindent
+% The following list describes all possible options of
+% |\includepdf|. All options are using the \meta{key=value} syntax.
+%
+% \newcommand*{\df}[1]{(Default: \mbox{|#1|})}
+%
+% \setlength{\leftmargini}{\parindent}
+% \begin{itemize}
+%
+%
+% \item Main options:
+%
+% \begin{description}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item[pages] Selects pages to insert. The argument is a comma
+% separated list, containing page numbers
+% (|pages={3,5,6,8}|), ranges of page numbers
+% (|pages={4-9}|) or any combination.
+% To insert empty pages use |{}|.
+% \par
+% E.g.: |pages={3,{},8-11,15}| will insert
+% page 3, an empty page, and pages 8, 9, 10, 11,
+% and 15.
+% \par
+% Page ranges are specified by the following syntax:
+% \meta{m}|-|\meta{n}. This selects all pages from
+% \meta{m} to \meta{n}. Omitting \meta{m} defaults
+% to the first page; omitting \meta{n} defaults to
+% the last page of the document. Another way to
+% select the last page of the document, is to use the
+% keyword |last|. (This is only permitted in a
+% page range.)
+% \par
+% E.g.: |pages=-| will insert \emph{all} pages
+% of the document, and |pages=last-1| will insert
+% all pages in reverse order.
+% \par\df{pages=1}
+% \item[nup] Puts multiple logical pages onto each sheet
+% of paper. The syntax of this option is:
+% |nup=|\meta{xnup}|x|\meta{ynup}. Where
+% \meta{xnup} and \meta{ynup} specify the number of
+% logical pages in horizontal and vertical direction,
+% which are arranged on each sheet of paper.
+% \df{nup=1x1}
+% \item[landscape] Specifies the format of the sheet of paper,
+% which is rotated by 90~degrees. This does
+% \emph{not} affect the logical pages, which
+% will \emph{not} be rotated by the `landscape'
+% option. To rotate the logical pages use the
+% `angle' option (e.g.~`angle=90').
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{landscape=false}
+% \end{description}
+%
+%
+% \item Layout options:
+%
+% \begin{description}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item[delta] Puts some horizontal and vertical space between the
+% logical pages. The argument should be two dimensions,
+% separated by space. See Chapter~\ref{sec:layout} and
+% Figure~\ref{fig:layout}. \df{delta=0 0}.
+% \item[offset] Displaces the origin of the inserted pages.
+% The argument should be two dimensions, separated
+% by space. In `oneside' documents positive values
+% shift the pages to the \emph{right} and to the
+% \emph{top} margin, respectively, whereas in `twoside'
+% documents positive values shift the pages to the
+% \emph{outer} and to the \emph{top} margin,
+% respectively. See Chapter~\ref{sec:layout} and
+% Figure~\ref{fig:layout}. \df{offset=0 0}
+% \item[frame] Puts a frame around each logical page. The frame is
+% made of lines of thickness |\fboxrule|. Either `true'
+% or `false' (or no value, which is equivalent to `true').
+% \df{frame=false}
+% \item[column] Pdfpages normally uses `row-major' layout, where
+% successive pages are placed in rows along the paper.
+% The |column| option changes the output into a
+% `column-major' layout, where successive pages are
+% arranged in columns down the paper.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{column=false}
+% \item[columnstrict] By default the last page is not set in a
+% strict `column-major' layout, if the logical
+% pages do not fill up the whole page. The
+% |columnstrict| option forces a strict
+% `column-major' layout for the last page.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{columnstrict=false}
+% \par\hskip15pt
+% \begin{minipage}[b]{110pt}
+% \centering
+% \begin{tabular}{|c|c|c|}\hline
+% 1 & 4 & \phantom{6}\\\hline
+% 2 & 5 &\\\hline
+% 3 &&\\\hline
+% \end{tabular}\smallskip\par
+% |columnstrict=true|
+% \end{minipage}
+% \hskip15pt
+% \begin{minipage}[b]{110pt}
+% \centering
+% \begin{tabular}{|c|c|c|}\hline
+% 1 & 3 & 5\\\hline
+% 2 & 4 & \\\hline
+% &&\\\hline
+% \end{tabular}\smallskip\par
+% |columnstrict=false|
+% \end{minipage}
+% \item[openright] This option puts an empty page before the
+% first logical page. In combination with |nup=2x1|,
+% |nup=2x2|, etc., this means that the first page
+% is on the right side. The same effect can be
+% achieved with the |pages| option, if an empty page
+% is inserted in front of the first page.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{openright=false}
+% \item[pagecommand] Declares \LaTeX\ commands, which are executed
+% on each sheet of paper.
+% \df{pagecommand=\{\bslash thispagestyle\{empty\}\}}
+% \item[turn] By default pages in landscape format are displayed
+% in landscape orientation (if the \PDF\ viewer supports
+% this). With \texttt{turn=false} this can be prohibited.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{turn=true}
+% \item[noautoscale] By default pages are scaled automatically.
+% This can be suppressed with the
+% \texttt{noautoscale} option.
+% In combination with the \texttt{scale} option
+% (from graphicx) the user has full control over
+% the scaling process.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{noautoscale=false}
+% \item[fitpaper] Adjusts the paper size to the one of the
+% inserted document.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{fitpaper=false}
+% \item[reflect] Reflects included pages.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{reflect=false}
+% \item[signature] Creates booklets by rearranging
+% pages into signatures and setting
+% |nup=1x2| or |nup=2x1|, respectively. This option
+% takes one argument specifying the size of the
+% signature, which should be a multiple of 4.\par
+% An example for documents in portrait orientation:\par
+% |\includepdf[pages=-, signature=8,|\\
+% \hspace*{6em} |landscape]{portrait-doc.pdf}|\par
+% An example for documents in landscape orientation:\par
+% |\includepdf[pages=-, signature=8]{landscape-doc.pdf}|
+% \item[signature*] Similar to |signature|, but now for right-edge
+% binding.
+% \item[booklet] This option is just a shortcut of the `signature'
+% option, if you choose a signature value
+% so large that all pages fit into one signature.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{booklet=false}
+% \item[picturecommand] Declares picture commands which are executed
+% on every page within a picture environment with the
+% base point at the lower left corner of the page.
+% (The base point does not change if the page is
+% rotated, e.g.~by the |landscape| option.)
+% \df{picturecommand=\{\}}
+% \item[picturecommand*] Like |picturecommand|, but with the restriction
+% that |picturecommand*| executes its picture commands
+% only on the very first page.
+% \df{picturecommand*=\{\}}
+% \item[pagetemplate] By default the first inserted page will be
+% used as a template. This means that all further
+% pages are scaled such that they match within the
+% contour of this
+% first page. This option allows to declare another
+% page to be used as a template; which is only useful
+% if a \PDF\ document contains different page sizes
+% or page orientations. The argument should
+% be a page number.
+% \df{pagetemplate=\meta{first inserted page}}
+% \item[templatesize] This option is similar to the |pagetemplate|
+% option, but its arguments specify the size of
+% the template directly. Its syntax is:
+% |templatesize={|\meta{width}|}{|\meta{height}|}|
+% Note: The two lengths should be a bit larger than
+% desired, to keep away from rounding errors.\par
+% \df{templatesize=\meta{size of the first inserted page}}
+% \item[rotateoversize] This option allows to rotate oversized
+% pages. E.g.\ pages in landscape orientation are
+% oversized relatively to their portrait counterpart,
+% because they do not match within the contour of
+% a portrait page without rotating them. By default
+% oversized pages are scale and are \emph{not} rotated.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{rotateoversize=false}
+% \item[doublepages] Inserts every page twice. This is useful for
+% 2-up printing, if one wants to cut the stack of paper
+% afterwards to get two copies.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{doublepages=false}
+% \item[doublepagestwist] Whereas with |doublepages| the cutting
+% edge is once on the inner side and ones on the outer
+% side, |doublepagestwist| turns the pages such, that
+% the cutting edge is always on the inner side.
+% Either `true' or `false' (or no value, which is
+% equivalent to `true'). \df{doublepagestwist=false}
+% \item[doublepagestwistodd] Turns the pages such, that the
+% cutting edge is always on the outer side.
+% Either `true' or `false' (or no value, which is
+% equivalent to `true'). \df{doublepagestwistodd=false}
+% \item[doublepagestwist*] Like |doublepagestwist| but for
+% double side printing.
+% Either `true' or `false' (or no value, which is
+% equivalent to `true'). \df{doublepagestwist*=false}
+% \item[doublepagestwistodd*] Like |doublepagestwistodd| but for
+% double side printing
+% Either `true' or `false' (or no value, which is
+% equivalent to `true'). \df{doublepagestwistodd*=false}
+% \item[duplicatepages] Duplicates each page $n$ times,
+% with $n$ being the argument to this option.
+% \df{duplicatepages=2}
+% \end{description}
+%
+% \item Miscellaneous options:
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \begin{description}
+% \item[lastpage] In \DVI\ mode pdfpages cannot determine the number of
+% pages of the included document. So this option is suitable to
+% specify the number of pages. This option is only used in \DVI\ mode
+% and has no meaning in any other mode. The argument should be a page
+% number. \df{lastpage=1}
+% \end{description}
+%
+% \item Hypertext options:
+%
+% \begin{description}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item[link] Inserted pages become a target
+% of a hyperlink. The name of the link is
+% `\texttt{\meta{filename}.\meta{page number}}'.
+% The filename extension of \meta{filename}
+% \emph{must not} be stripped.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true').
+% \df{link=false}
+% \item[linkname] Changes the default linkname created by the option
+% \texttt{link}. Instead of \meta{filename} the
+% value of this option is used. E.g.~\texttt{
+% linkname=mylink} produces the linknames
+% `\texttt{mylink.\meta{page number}}'.
+% \item[thread] Combines inserted pages to an article thread.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{thread=false}
+% \item[threadname] Several threads are distinguished by their
+% threadnames. By default the threadname is equal
+% to the filename (plus filename extension), but it
+% can be changed with this option. This is useful if
+% the same file is inserted twice or more times and
+% should not be combined to one single thread.
+% Or the other way round if pages from different
+% documents should be combined to one single thread.
+% \df{threadname=\meta{filename.ext}}
+% \item[linktodoc] Lets the inserted pages be hyperlinks to the
+% document from which they were extracted.
+% Note that the \PDF-Viewer will not find the
+% file, if \meta{filename} has not filename
+% extension (.pdf).
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{linktodoc=false}
+% \end{description}
+%
+%
+% \item Additional hypertext options:
+%
+% \begin{description}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item[linkfit] Specifies, how the viewer displays a linked page.
+% This option changes the default behavior of the
+% option \texttt{link}.
+% Possible values are:
+% \texttt{Fit},
+% \texttt{FitH \meta{top}},
+% \texttt{FitV \meta{left}},
+% \texttt{FitB},
+% \texttt{FitBH \meta{top}},
+% \texttt{FitBV \meta{left}},
+%^^A \texttt{fitr \meta{left} \meta{bottom}
+%^^A \meta{right} \meta{top}},
+%^^A \texttt{xyz \meta{left} \meta{top} \meta{zoom}},
+% and \texttt{Region}.
+%
+% See \cite{PDFRef} for a details description of these
+% \PDF\ destinations. The |region| destination was
+% added by pdfpages and is not a real \PDF\
+% destinations. It scales a page such that the
+% included page fits exactly into the window of the
+% \PDF\ viewer.\par
+% Note that not all of these options are supported by
+% all \TeX-engines or drivers, respectively.
+% \df{linkfit=fit}
+% \item[linktodocfit] By default the option \texttt{linktodoc} opens
+% the page in `Fit in Window' view.
+% Another view can be specified with this option.
+% Possible values are the legal \PDF\ tokens:
+% \texttt{/FitH} \meta{top}, \texttt{/FitV}
+% \meta{left}, etc.
+% (See \cite{PDFRef} for more details.)
+% \df{linktodocfit=/Fit}
+% \item[newwindow] By default option |linktodoc| opens a new
+% window. This can be changed with option |newwindow|.
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{newwindow=true}
+% \item[linkfilename] Sets the name (with path) of the file to be
+% linked to by the option \texttt{linktodoc}.
+% You will hardly ever need this option.
+% \df{linkfilename=\meta{filename.ext}}
+% \end{description}
+%
+%
+% \item Experimental options: (Syntax may change in future versions!)
+%
+% \begin{description}
+% \makeatletter\@beginparpenalty=10000\makeatother
+%
+% \item[addtotoc] Adds an entry to the table of contents. This
+% option requires five arguments, separated by commas:
+%
+% \texttt{addtotoc=\{\meta{page number},^^A
+% \meta{section},\meta{level},\meta{heading},^^A
+% \meta{label}\}}
+%
+% \begingroup
+% \renewcommand*\descriptionlabel[1]{\hspace\labelsep
+% \normalfont #1}
+% \begin{description}
+% \item[\meta{page number}:] Page number of the
+% inserted page.
+% \item[\meta{section}:] \LaTeX\ sectioning name
+% -- e.g., section, subsection, \ldots
+% \item[\meta{level}:] Number, denoting depth of
+% section -- e.g., 1 for section level, 2 for
+% subsection level, \ldots
+% \item[\meta{heading}:] Title inserted in the
+% table of contents.
+% \item[\meta{label}:] Name of the label. This label
+% can be referred to with |\ref| and |\pageref|.
+% \end{description}
+% \endgroup
+%
+% Note: The order of the five arguments must not
+% be mixed. Otherwise you will get very strange
+% error messages.
+%
+% The |addtotoc| option
+% accepts multiple sets of the above mentioned five
+% arguments, all separated by commas. The sets must
+% be sorted such that the \meta{page number}s are in
+% ascending order. (Strictly speaking they must have
+% the same order as the page numbers specified by
+% the |pages| option.)
+%
+% The proper recursive definition of the |addtotoc|
+% option is:
+%
+% \texttt{addtotoc=}\{\meta{toc-list}\}
+%
+% \meta{toc-list} $\rightarrow$ \meta{page number},^^A
+% \meta{section},\meta{level},\meta{heading},^^A
+% \meta{label}[,\meta{toc-list}]
+%
+%
+% \item[addtolist] Adds an entry to the list of figures, the
+% list of tables, or any other list
+% (e.g.~from \emph{float.sty}). This option
+% requires four arguments, separated by commas:
+%
+% \texttt{addtolist=\{\meta{page number},^^A
+% \meta{type},\meta{heading},\meta{label}\}}
+%
+% \begingroup
+% \renewcommand*\descriptionlabel[1]{\hspace\labelsep
+% \normalfont #1}
+% \begin{description}
+% \item[\meta{page number}:] Page number of the
+% inserted page.
+% \item[\meta{type}:] Name of a floating
+% environment. (\texttt{figure},
+% \texttt{table}, etc.)
+% \item[\meta{heading}:] Title inserted into LoF,
+% LoT, etc.
+% \item[\meta{label}:] Name of the label. This label
+% can be referred to with |\ref| and |\pageref|.
+% \end{description}
+% \endgroup
+%
+% Like \texttt{addtotoc}, \texttt{addtolist} accepts
+% multiple sets of the above mentioned four arguments,
+% all separated by commas. The proper recursive
+% definition is:
+%
+% \texttt{addtolist=}\{\meta{lof-list}\}
+%
+% \meta{lof-list} $\rightarrow$ \meta{page number},^^A
+% \meta{type},\meta{heading},\meta{label}^^A
+% [,\meta{lof-list}]
+%
+%
+% \item[survey] Creates a survey of those pages of the document, which
+% are marked with |\AddToSurvey|. (|\AddToSurvey| is
+% a simple command with no arguments. It just writes out
+% labels to the |.aux| file.)
+% This option may be used when preparing slides to
+% create a survey of only `finished' pages -- if
+% pages are build up incrementally.
+%
+% To use this option a special sequence of production
+% steps must be obeyed. Here is a small example:
+%
+%\begin{verbatim}
+% --- slides.tex ---
+% \documentclass{article}
+% \usepackage[draft,enable-survey]{pdfpages}
+% \begin{document}
+% ... some text ...
+% \AddToSurvey
+% ... some text ...
+% \includepdf[survey,nup=2x2]{slides-tmp.pdf}
+% \end{document}
+%\end{verbatim}
+%
+% This is the outline of a document, called |slides.tex|.
+% Run it through \pdfLaTeX\ several times until all
+% cross-references are solved. (\LaTeX\ will produce a
+% warning, if cross-references are not solved, yet.)
+% Now copy the file |slides.pdf| to |slides-tmp.pdf|
+% and rename |draft| (package option of pdfpages) to
+% |final|. The next and final run through \pdfLaTeX\
+% will actually insert the desired pages, whereas the
+% former runs with |draft| did just insert blank pages.
+% The inserted pages are hyperlink to the orignial
+% pages.
+%
+% Experienced users would certainly call
+%\begingroup
+%\setlength\topsep{0pt}
+%\begin{verbatim}
+% pdflatex '\PassOptionsToPackage{final}{pdfpages} \input{slides}'
+%\end{verbatim}
+%\endgroup
+% instead of exchanging |draft| for |final|.
+%
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{survey=false}
+%
+%
+% \item[survey-nolink] Same as option |survey| except that the
+% inserted pages do not become hyperlinks.
+% This option may be used to create an external survey.
+% To continue the example above (|slides.tex|), it
+% is now possible to create handouts of the `finished'
+% slides as an external document.
+%
+%\begin{verbatim}
+% \documentclass{article}
+% \usepackage{xr}
+% \externaldocument{slides}
+% \usepackage[enable-survey]{pdfpages}
+% \begin{document}
+% \includepdf[survey-nolink, nup=1x2]{slides.pdf}
+% \end{document}
+%\end{verbatim}
+%
+% Either `true' or `false' (or no value, which
+% is equivalent to `true'). \df{survey-nolink=false}
+%
+%
+% \item[xr-prefix] Adjusts a prefix to the labels |\includepdf| is
+% looking for. The name of the prefix must be the
+% same as the name of the optional argument of
+% |\externaldocument|.
+% \df{xr-prefix=\{\}}
+%
+%
+% \end{description}
+%
+% \end{itemize}
+%
+%
+% \begin{figure}
+% \centering
+% \setlength{\unitlength}{.7mm}
+% \def\thick{.7pt}
+% \def\thin{.2pt}
+% ^^A\fbox{
+% \begin{picture}(145,238)
+% \small
+% \put(0,33){
+% \linethickness{\thick}
+% \put(0,0){\framebox(145,205){}}
+% \linethickness{\thin}
+% \put(10,15){\dashbox(35,49){}}
+% \put(55,15){\dashbox(35,49){}}
+% \put(100,15){\dashbox(35,49){}}
+% \put(10,78){\dashbox(35,49){}}
+% \put(55,78){\dashbox(35,49){}}
+% \put(100,78){\dashbox(35,49){}}
+% \put(10,141){\dashbox(35,49){}}
+% \put(55,141){\dashbox(35,49){}}
+% \put(100,141){\dashbox(35,49){}}
+% \put(5,7){
+% \put(10,15){\framebox(35,49){}}
+% \put(55,15){\framebox(35,49){}}
+% \put(100,15){\framebox(35,49){}}
+% \put(10,78){\framebox(35,49){}}
+% \put(55,78){\framebox(35,49){}}
+% \put(100,78){\framebox(35,49){}}
+% \put(10,141){\framebox(35,49){}}
+% \put(55,141){\framebox(35,49){}}
+% \put(100,141){\framebox(35,49){}}
+% \put(45,36){\vector(1,0){10}}
+% \put(55,36){\vector(-1,0){10}}
+% \put(44.5,38){\textit{delx}}
+% \put(90,36){\vector(1,0){10}}
+% \put(100,36){\vector(-1,0){10}}
+% \put(89.5,38){\textit{delx}}
+% \put(27,64){\vector(0,1){14}}
+% \put(27,78){\vector(0,-1){14}}
+% \put(15,70){\textit{dely}}
+% \put(27,127){\vector(0,1){14}}
+% \put(27,141){\vector(0,-1){14}}
+% \put(15,133){\textit{dely}}
+% }
+% \put(10,15){\vector(1,0){5}}
+% \put(15,15){\vector(0,1){7}}
+% \put(8,8){\textit{offx}}
+% \put(17,17){\textit{offy}}
+% }
+%
+% ^^A legend
+%
+% \setlength{\fboxsep}{4pt}
+% \put(72.5,10){
+% \makebox(0,0){
+% \fbox{
+% \begin{tabular}{l@{\hskip20pt}l}
+% \linethickness{\thick}^^A
+% \raisebox{.8ex}{\line(1,0){5}} physical sheet of paper
+% &
+% |delta=|\meta{delx} \meta{dely}
+% \\
+% \linethickness{\thin}^^A
+% \raisebox{.8ex}{\line(1,0){5}} logical pages
+% &
+% |offset=|\meta{offx} \meta{offy}
+% \\
+% \raisebox{.8ex}{\line(1,0){1}\hskip.55mm\line(1,0){1}
+% \hskip.55mm\line(1,0){1}} centered position
+% &
+% \\
+% \end{tabular}
+% }}
+% }
+% \end{picture}
+% ^^A}% fbox
+% \caption{Layout}
+% \label{fig:layout}
+% \end{figure}
+%
+%
+% \noindent
+% Internally the command |\includepdf|
+% makes use of the |\includegraphics| command from the |graphicx|
+% (actually |graphics|) package. Hence it is possible to use
+% all the options of |\includegraphics|, too.
+% Options which are not interpreted by |\includepdf|
+% are passed directly to |\includegraphics|.
+%
+% Especially the `trim' and `clip' options of |\includegraphics|
+% are quite useful, if only parts of a page should be inserted.
+% (Maybe to cut off the header and footer of the inserted pages.)
+% Just use the `trim' and `clip' options as if they were options
+% of |\includepdf|. They will be passed to |\includegraphics|
+% internally.
+%
+%
+% \begin{samepage}
+% \bigskip\noindent
+% \DescribeMacro{\includepdfmerge}
+% Inserts pages of several external \PDF\ documents.
+%
+% \medskip\noindent
+% |\includepdfmerge[|\meta{key=val}|]{|\meta{file-page-list}|}|
+%
+% \begin{quote}
+% \begin{tabular}{@{}l@{\,--~}>{\raggedright}p{.73\linewidth}}
+% \meta{key=val} & A comma separated list of options
+% using the \meta{key}=\meta{value} syntax.
+% \tabularnewline
+% \meta{file-page-list} & \meta{filename}[\textbf{,}^^A
+% \meta{page spec}]^^A
+% [\textbf{,}\meta{file-page-list}]\\
+% A comma separated list of filenames and
+% optional \meta{page spec} specifiers.
+% A \meta{page spec} can be everything the
+% option |pages| accepts. Leading and trailing
+% spaces of items in the list is stripped.
+%
+% \end{tabular}
+% \end{quote}
+% \end{samepage}
+%
+% The |\includepdfmerge| command uses the same options as
+% |\includepdf| with
+% one exception. The option |pages| has no meaning for
+% |\includepdfmerge|. Instead the \meta{page spec} specifier
+% is used to specify which pages should be inserted.
+% The \meta{page spec} specifier accepts the same values as
+% the |pages| option. If no \meta{page spec} specifier is given,
+% only the first page will be inserted.
+%
+% \paragraph{Examples:}
+% To create a kind of summary of three \PDF\ documents, it might
+% be nice to insert just the first page of each document and
+% to provide links to the original documents:
+%
+% \begin{quote}
+% |\includepdfmerge[nup=1x3, landscape, linktodoc]|\\
+% | {doc1.pdf, doc2.pdf, doc3.pdf}|
+% \end{quote}
+%
+% \noindent
+% But sometimes the title page of a document is not the first page.
+% So it would be more pleasant to insert the title page of
+% each document than the first page. This can be done with
+% the \meta{page spec} specifier. The following example inserts
+% the second page of \textit{doc1.pdf} and the third page of
+% \textit{doc2.pdf} and \textit{doc3.pdf}:
+%
+% \begin{quote}
+% |\includepdfmerge[nup=1x3, landscape, linktodoc]|\\
+% | {doc1.pdf, 2, doc2.pdf, 3, doc3.pdf, 3}|
+% \end{quote}
+%
+% \noindent
+% Here is an example of more complex \meta{page spec}
+% specifiers:
+%
+% \begin{quote}
+% |\includepdfmerge[nup=1x3, landscape, linktodoc]|\\
+% | {doc1.pdf, 1-3,|\\
+% | doc2.pdf, 3, 5, 9,|\\
+% | doc3.pdf, 3-5, 7}|
+% \end{quote}
+%
+%
+%
+% \bigskip\noindent
+% \DescribeMacro{\includepdfset}
+% If you need the same options for |\includepdf| all the time, it is
+% possible to define global options with |\includepdfset|. The
+% argument of |\includepdfset| is a comma separated list of options,
+% using the \meta{key}=\meta{value} syntax.
+% These options are processed each time |\includepdf| is called.
+% Local options (passed as an optional argument directly to |\includepdf|)
+% are overwriting global options:
+% \begin{quote}
+% |\includepdfset{|\meta{global options}|}|\\
+% |\includepdf[|\meta{local options}|]{pdf-file}|
+% \end{quote}
+% Only options specific to this package can be made global by
+% |\includepdfset|. Options of the graphicx package are not
+% concerned.
+%
+% \bigskip\noindent
+% \DescribeMacro{\threadinfodict}
+% When using the option |thread| to create an article thread, it
+% may be useful to create a thread information dictionary, too,
+% which contains informations about the thread, such as its title,
+% author, and creation date. The macro |\threadinfodict| is used
+% to set these informations. It can be redefined and may contain
+% entries of a thread information dictionary in low-level \PDF\
+% commands.
+% (See \cite{PDFRef} for more information.)
+%
+% \smallskip
+% |\renewcommand*{\threadinfodict}|\\\hspace*{\parindent}
+% | {/Title (My first thread) /Author (That's me!)}|
+%
+%
+%
+% \subsection{The Layout}\label{sec:layout}
+%
+% The default layout can be changed by the options |delta|
+% and |offset|. Figure~\ref{fig:layout} shows the
+% meaning of these options.
+%
+% The inserted logical pages are being centered on the
+% sheet of paper by default. To displace them use the |offset|
+% option, which argument should be two dimensions. E.g.~
+% |offset=10mm 14mm| means that the logical pages are displaced
+% by 10\,mm in horizontal direction and by 14\,mm in vertical
+% direction.
+% In `oneside' documents positive values shift the pages to
+% the \emph{right} and to the \emph{top} margin, respectively,
+% whereas in `twoside' documents positive values shift the pages
+% to the \emph{outer} and to the \emph{top} margin, respectively.
+%
+% By default logical pages are being arranged side by side.
+% To put some space between them, use the |delta| option,
+% whose argument should be two dimensions.
+% Figure~\ref{fig:layout} shows the meaning of |delta|.
+%
+% The layout options |delta| and |offset|
+% \textit{always} refer to a sheet of paper in portrait
+% orientation. No matter whether you have set the
+% |landscape| option to |true|, or not.
+%
+% If you are confused about horizontal\,(|x|)
+% and vertical\,(|y|) directions, just set the option
+% |turn=false|. Now your \PDF\ viewer shows the pages in
+% the \textit{same} orientation as in Figure~\ref{fig:layout}.
+% And the options |delta| and |offset| have
+% the \textit{same} meaning as in Figure~\ref{fig:layout}.
+% Regardless of any other options.
+%
+%
+% \subsection{Hints for Users of platex}
+% \begin{itemize}
+% \item
+% The recommended way to tell |pdfpages| that you are using |platex| is to
+% add |dvipdfmx| as a class option, e.g.:
+%
+% \begin{quote}
+% |\documentclass[dvipdfmx]{article}|\\
+% |\usepackage{pdfpages}|
+% \end{quote}
+%
+% \item Pdfpages calls program |extractbb| to get the total number of
+% pages of a PDF. But if an |xbb| file (output of |extractbb|) exists,
+% pdfpages will not call |extractbb| but use this file. However, be
+% very cautious with |xbb| files: \emph{Do not use |xbb| files for PDFs
+% with varying page sizes.} Because an |xbb| file contains only the page
+% size of a single page.
+% \end{itemize}
+%
+%
+% \subsection{Pitfalls}
+%
+% \begin{description}
+% \item[pagecolor]
+% When setting the background color with |\pagecolor|
+% (a command from \textit{color.sty}), the first
+% |\pagecolor| \emph{must} precede |\usepackage{pdfpages}|.
+% \begin{quote}
+% |\usepackage{color}|\\
+% |\pagecolor{white}|\\
+% |\usepackage{pdfpages}|
+% \end{quote}
+% The color is nonrelevant, it can be changed afterwards
+% by using |\pagecolor| again. Just the order (first
+% |\pagecolor| before |\usepackage{pdfpages}|) is
+% important. -- This is not needed when using \VTeX.
+% \end{description}
+%
+%
+% \section{Required Packages}
+%
+% The |pdfpages| package requires the following packages:
+%
+% \begin{description}
+% \item[eso-pic]
+% \texttt{CTAN:macros/latex/contrib/eso-pic/}
+% \item[atbegshi]
+% \texttt{CTAN:macros/latex/contrib/oberdiek/}
+% \item[pdflscape]
+% \texttt{CTAN:macros/latex/contrib/oberdiek/}
+% \item[graphicx, ifthen, calc]
+% These packages belong to the standard \LaTeX\
+% distribution.
+% \end{description}
+%
+% \noindent
+% Furthermore it requires a recent version of:
+% \begin{description}
+% \item[pdftex.def]
+% \texttt{ http://www.tug.org/applications/pdftex/}
+% \end{description}
+%
+% \noindent
+% Since pdf\TeX, Version 3.14159-1.00a-pretest-20010806,
+% \PDF\ import has improved a lot. This
+% results in much smaller file sizes, faster processing and the
+% intuitively correct treatment of landscape pages.
+% The latest version of pdf\TeX\ can be found at:
+% \texttt{ftp://ftp.muni.cz/pub/tex/local/cstug/thanh/pdftex}.
+%
+%
+%
+% \section{Acknowledgment}
+% I would like to thank \textsc{Rolf Niepraschk} and
+% \textsc{Heiko Oberdiek} for their useful
+% hints and suggestions. As well as \textsc{Ross Moore},
+% who encouraged me to implement the hypertext features.
+%
+%
+% \StopEventually{
+% \begin{thebibliography}{9}
+%
+% \bibitem{pdftex}
+% H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh,
+% Sebastian Rahtz, Hans Hagen,
+% \textit{The \pdfTeX\ user manual},
+% \url{http://www.tug.org/applications/pdftex}
+%
+% \bibitem{PDFRef}
+% \textit{PDF Reference}, Adobe Systems Incorporated,\\
+% \url{http://www.adobe.com/devnet/pdf/pdf_reference.html}
+%
+% \bibitem{pax}
+% Heiko Oberdiek,
+% \textit{pax: Extract and reinsert PDF annotations with pdfTeX}
+% \url{http://www.ctan.org/pkg/pax}
+%
+% \end{thebibliography}
+% }
+%
+%
+% \iffalse
+%<*package>
+% \fi
+% \section{Implementation}
+%
+% \subsection{Package Options}
+% \begin{macrocode}
+\newif\ifAM@pkg@draft \AM@pkg@draftfalse
+\DeclareOption{draft}{\AM@pkg@drafttrue}
+\DeclareOption{final}{\AM@pkg@draftfalse}
+\newif\ifAM@pkg@survey \AM@pkg@surveyfalse
+\DeclareOption{enable-survey}{\AM@pkg@surveytrue}
+\DeclareOption{disable-survey}{\AM@pkg@surveyfalse}
+\newif\ifAM@pkg@demo \AM@pkg@demofalse
+\DeclareOption{demo}{\AM@pkg@demotrue}
+\DeclareOption{nodemo}{\AM@pkg@demofalse}
+% \end{macrocode}
+% |\AM@ifdriverlater| checks that the driver loaded is more recent
+% than the given date. See |\@ifpackagelater| from the standard
+% \LaTeX\ kernel.
+% \begin{macrocode}
+\def\AM@ifdriverlater{\@ifl@ter{def}}
+% \end{macrocode}
+% The configuration file |pdfpages.cfg| can be used to make
+% new driver files known to the package.
+% \begin{macrocode}
+\InputIfFileExists{pdfpages.cfg}{%
+ \PackageInfo{pdfpages}{Loading configuration file `pdfpages.cfg'}}{}
+% \end{macrocode}
+% These options overrule the automatic detection of the \TeX-engine.
+% \begin{macrocode}
+\DeclareOption{pdftex}{\def\AM@driver{pdftex}}
+\DeclareOption{luatex}{\def\AM@driver{luatex}}
+\DeclareOption{vtex}{\def\AM@driver{vtex}}
+\DeclareOption{xetex}{\def\AM@driver{xetex}}
+\DeclareOption{dvips}{\def\AM@driver{dvips}}
+\DeclareOption{dvipdfmx}{\def\AM@driver{dvipdfmx}}
+\DeclareOption{null}{\def\AM@driver{null}}
+% \end{macrocode}
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% \subsection{Detection of TeX-Engine}
+%
+% Automatic detection of \TeX-engine: \pdfTeX, \VTeX\ or \XeTeX.
+% This detection is omitted if |\AM@driver| is already defined. This
+% happens if the driver was given as a package option or if
+% the driver was identified in the configuration files |pdfpages.cfg|
+%
+% \begin{macrocode}
+\ifAM@pkg@demo
+ \def\AM@driver{null}
+\fi
+\@ifundefined{AM@driver}{
+ \begingroup
+ \@ifundefined{luatexversion}{%
+ \@ifundefined{pdftexversion}{%
+ \@ifundefined{XeTeXversion}{%
+ \@ifundefined{OpMode}{%
+ \gdef\AM@driver{null}
+ }{\gedf\AM@driver{vtex}}%
+ }{\gdef\AM@driver{xetex}}%
+ }{\gdef\AM@driver{pdftex}}%
+ }{\gdef\AM@driver{luatex}}%
+ \endgroup
+}{}
+% \end{macrocode}
+% \subsection{Required Packages and Version Checking}
+%
+% \begin{macrocode}
+\RequirePackage{ifthen, calc, eso-pic}
+%\@ifundefined{kansuji}{%
+ \RequirePackage{graphicx}%
+%}{%
+% \RequirePackage[dvipdfmx]{graphicx}%
+%}
+\newif\ifAM@DVIoutput\AM@DVIoutputfalse
+\newdimen\AM@pagewidth
+\newdimen\AM@pageheight
+\input{pp\AM@driver.def}
+\ifx\AM@endinput\relax\expandafter\endinput\fi
+\ifAM@pkg@survey
+ \let\AM@setanchor\AM@anchor@special
+ \RequirePackage{count1to}%
+ \AddToShipoutPicture{\AM@setanchor}%
+\fi
+% \end{macrocode}
+% We use |\PLS@Rotate| from |pdflscape| to ratate pages. But simply
+% loading |pdflscape| modifies the |landscape| environment such that
+% \emph{all} landscape pages are rotated by default which is undesired.
+% To prevent this we postpone the loading of the package.
+%
+% If the user loads |pdflscape| explicitely she gets the rotated
+% landscape environment and the packages will not be reloaded by the next
+% commands. However, if |pdflscape| is not loaded by the user, then we
+% load it and reset the |landscape| environment afterwards.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \let\AM@orig@landscape\landscape
+ \let\AM@orig@endlandscape\endlandscape
+ \RequirePackage{pdflscape}%
+ \let\landscape\AM@orig@landscape
+ \let\endlandscape\AM@orig@endlandscape
+}
+% \end{macrocode}
+% Let's save the original meaning of |\includegraphics|, because
+% graphicx.sty in demo mode (`demo' option) will overwrite |\includegraphics|
+% \emph{after} |\begin{document}|.
+% \begin{macrocode}
+\let\AM@Ginclude@graphics\Ginclude@graphics
+% \end{macrocode}
+% Checking for new versions of \texttt{eso-pic.sty}.
+% \begin{macrocode}
+\@ifpackagelater{eso-pic}{2001/07/20}
+ {\def\AM@AddToShipoutPicture{\AddToShipoutPicture*}%
+ \def\AM@ClearShipoutPicture{\relax}}
+ {\def\AM@AddToShipoutPicture{\AddToShipoutPicture}%
+ \def\AM@ClearShipoutPicture{\ClearShipoutPicture}}
+ \let\Orig@AM@AddToShipoutPicture\AM@AddToShipoutPicture
+% \end{macrocode}
+% \subsection{Booleans}
+% \begin{macrocode}
+\newif\ifAM@openright\AM@openrightfalse
+\newif\ifAM@frame\AM@framefalse
+\newif\ifAM@landscape\AM@landscapefalse
+\newif\ifAM@turn\AM@turntrue
+\newif\ifAM@thread\AM@threadfalse
+\newif\ifAM@link\AM@linkfalse
+\newif\ifAM@linktodoc\AM@linktodocfalse
+\newif\ifAM@survey\AM@surveyfalse
+\newif\ifAM@surveynolink\AM@surveynolinkfalse
+\newif\ifAM@output\AM@outputtrue
+\newif\ifAM@column\AM@columnfalse
+\newif\ifAM@columnstrict\AM@columnstrictfalse
+\newif\ifAM@noautoscale\AM@noautoscalefalse
+\newif\ifAM@fitpaper\AM@fitpaperfalse
+\newif\ifAM@doublepages\AM@doublepagesfalse
+\newif\ifAM@doublepagestwist\AM@doublepagestwistfalse
+\newif\ifAM@doublepagestwistx\AM@doublepagestwistxfalse
+\newif\ifAM@doublepagestmp\AM@doublepagestmpfalse
+\newif\ifAM@doublepagestmpi\AM@doublepagestmpifalse
+\newif\ifAM@duplicatepages\AM@duplicatepagesfalse
+\newif\ifAM@linkfilename\AM@linkfilenamefalse
+\newif\ifAM@signature\AM@signaturefalse
+\newif\ifAM@signaturestar\AM@signaturestarfalse
+\newif\ifAM@booklet\AM@bookletfalse
+\newif\ifAM@sigrotate\AM@sigrotatefalse
+\newif\ifAM@newwindow\AM@newwindowtrue
+\newif\ifAM@rescale\AM@rescalefalse
+\newif\ifAM@rotateoversize\AM@rotateoversizefalse
+\newif\ifAM@firstpage\AM@firstpagefalse
+\newif\ifAM@reflect\AM@reflectfalse
+\newif\ifAM@reflectall\AM@reflectallfalse
+\newif\ifAM@scale\AM@scaletrue
+\newif\ifAM@newpage\AM@newpagefalse
+% \end{macrocode}
+% Check, if memoir is loaded.
+% \begin{macrocode}
+\newif\ifAM@memoir\AM@memoirfalse
+\@ifclassloaded{memoir}{\AM@memoirtrue}{}
+% \end{macrocode}
+% \subsection{Commands}
+% Declare macro names and define default values.
+% \begin{macrocode}
+\newcommand*{\AM@pagestemp}{1}
+\newcommand*{\AM@pagecommand}{\thispagestyle{empty}}
+\newcommand*{\AM@lscape@rot}{0}
+\newcommand*{\AM@threadname}{}\newcommand*{\AM@linkname}{}
+\newcommand*{\AM@linkname@option}{}
+\newcommand*{\AM@linktodocfit}{/Fit}
+\newcommand*{\threadinfodict}{}
+\newcommand*{\AM@toclist}{}\newcommand*{\AM@loflist}{}
+\newcommand*{\AM@signature}{}
+\newcommand*{\AM@ARBug@hook}{}
+\newcommand*{\AM@xrprefix}{}
+\newcommand*{\AM@picturecommand}{}
+\newcommand*{\AM@picturecommandstar}{}
+\newsavebox{\AM@pagebox}
+% \end{macrocode}
+% \macro{\AM@checkinteger}
+% Check, if |#1| is a positive integer.
+% \begin{macrocode}
+\newif\ifAM@integer
+\begingroup
+\@makeother_
+\gdef\AM@checkinteger#1{%
+ \ifcat _\ifnum9<1#1_\else A\fi
+ \AM@integertrue
+ \else
+ \AM@integerfalse
+ \fi
+}
+\endgroup
+% \end{macrocode}
+% \macro{\AM@findfile}
+% Find file and set |\AM@currentdocname|.
+% \begin{macrocode}
+\newcommand*{\AM@findfile@i}[2]{%
+ \ifAM@pkg@demo
+ \else
+ \let\Ginclude@graphics\AM@Ginclude@graphics
+ \fi
+ \let\AM@currentdocname\relax
+ \AM@IfFileExists{#1.#2}{\edef\AM@currentdocname{#1.#2}}{%
+ \AM@IfFileExists{#1}{\edef\AM@currentdocname{#1}}{%
+ \ifx\Ginput@path\@undefined\else
+ \expandafter\@tfor\expandafter\AM@dir\expandafter
+ :\expandafter=\Ginput@path\do{%
+ \AM@IfFileExists{\AM@dir#1.#2}{%
+ \ifx\AM@currentdocname\relax
+ \edef\AM@currentdocname{\AM@dir#1.#2}%
+ \fi
+ }{%
+ \AM@IfFileExists{\AM@dir#1}{%
+ \ifx\AM@currentdocname\relax
+ \edef\AM@currentdocname{\AM@dir#1}%
+ \fi
+ }{}%
+ }%
+ }% \@tfor
+ \fi
+ }%
+ }%
+}
+\newcommand*{\AM@findfile@ii}[1]{%
+ \ifx\AM@currentdocname\relax
+ \PackageError{pdfpages}{Cannot find file `#1'}{}%
+ \fi
+}
+% \end{macrocode}
+% The options |width| and |height| (of graphics.sty) have no reasonable
+% meaning for |\includepdf|. Quit the contrary they spoil the calculation
+% of the scaling factors and therefore should not be used with pdfpages.
+%
+% Nevertheless these options are very usefull for |\includegraphics| and
+% some users even set these options globally:
+%
+% \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+%
+% In this way these options have an undesirable impact on pdfpages as
+% well since pdfpages forwards these options to graphics. Therefore we
+% kind of disable these settings by inserting |width=!,height=!| into
+% |\AM@global@opts| which itself gets finally inserted into the option
+% list of each |\includegraphics| call.
+%
+% \begin{macrocode}
+\newtoks\AM@global@opts
+\newcommand*{\AM@disable@width@height}{width=!,height=!}
+\AM@global@opts\expandafter{\AM@disable@width@height}
+% \end{macrocode}
+% \macro{\includepdfset}
+% This command sets global options for |\includepdf|
+% and |\includepdfmerge|.
+% \begin{macrocode}
+\newcommand*{\includepdfset}[1]{%
+ \AM@global@opts\expandafter{\AM@disable@width@height,#1}%
+}
+% \end{macrocode}
+% \macro{\includepdf}
+% This command inserts any pages of an external
+% \PDF\ document.
+% \begin{macrocode}
+\newcommand*{\includepdf}[2][]{%
+ \begingroup
+ \let\AM@threadname\relax
+ \def\AM@tmp{pdfpages}
+ \expandafter\AM@split@options
+ \expandafter\AM@tmp
+ \expandafter{\the\AM@global@opts,#1}
+ \edef\AM@temp{{pdfpages}{\the\@temptokena}}%
+ \expandafter\setkeys\AM@temp
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@pkg@draft} \and \boolean{AM@survey}}{%
+ \let\AM@currentdocname\relax
+ \renewcommand\includegraphics[2][]{Survey in draft-mode}%
+ \def\AM@pagecount{0}%
+ }{%
+ \AM@findfile{#2}%
+ \if\AM@threadname\relax
+ \def\AM@threadname{\AM@currentdocname}%
+ \fi
+ }%
+% \end{macrocode}
+% Gather all pdfpages' labels form the |aux| file and store
+% the page numbers in |\AM@pagestemp|. If there are no labels
+% reset |\AM@pagestemp|.
+% \begin{macrocode}
+ \ifAM@survey
+ \def\AM@pagestemp{}%
+ \@tempcnta=0
+ \def\foo{%
+ \@ifundefined{r@\AM@xrprefix pdfpages@page\the\@tempcnta}%
+ {\let\foo\relax}
+ {\expandafter\ifx\expandafter\\\AM@pagestemp\\
+ \edef\AM@pagestemp{%
+ \AM@pageref{\AM@xrprefix pdfpages@page\the\@tempcnta}}%
+ \else
+ \edef\AM@pagestemp{\AM@pagestemp,%
+ \AM@pageref{\AM@xrprefix pdfpages@page\the\@tempcnta}}%
+ \fi
+ \advance\@tempcnta 1\relax
+ }%
+ \foo
+ }%
+ \foo
+ \expandafter\ifx\expandafter\\\AM@pagestemp\\
+ \def\AM@pagestemp{1}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \ifAM@output
+ \expandafter\AM@readlist\expandafter{\AM@pagestemp}%
+ \expandafter\AM@output\expandafter{\the\AM@global@opts,#1}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \AM@CheckAtEnd
+ \endgroup
+ \AM@ClearShipoutPicture
+}
+% \end{macrocode}
+% \macro{\includepdfmerge}
+% This command merges pages of several \PDF\ documents.
+% \begin{macrocode}
+\newcommand*{\includepdfmerge}[2][]{%
+ \begingroup
+ \let\AM@currentdocname\relax
+ \def\AM@tmp{pdfpages}
+ \expandafter\AM@split@options
+ \expandafter\AM@tmp
+ \expandafter{\the\AM@global@opts,#1}%
+ \edef\AM@temp{{pdfpages}{\the\@temptokena}}%
+ \expandafter\setkeys\AM@temp
+ \AM@readlist{#2}%
+ \expandafter\AM@output\expandafter{\the\AM@global@opts,#1}%
+ \AM@CheckAtEnd
+ \endgroup
+ \AM@ClearShipoutPicture
+}
+% \end{macrocode}
+% \macro{\AM@CheckAtEnd}
+% Some simple checks.
+% \begin{macrocode}
+\newcommand{\AM@CheckAtEnd}{%
+ \ifx\@empty\AM@toclist\else
+ \PackageWarning{pdfpages}{%
+ There's something wrong with the entries\MessageBreak
+ of `addtotoc'. Not all entries were\MessageBreak
+ processed. Check `addtotoc'}%
+ \fi
+ \ifx\@empty\AM@loflist\else
+ \PackageWarning{pdfpages}{%
+ There's something wrong with the entries\MessageBreak
+ of `addtolist'. Not all entries were\MessageBreak
+ processed. Check `addtolist'}%
+ \fi
+}
+% \end{macrocode}
+% \macro{\AM@output}
+% This is the main output routine used by |\includepdf|
+% and |\includepdfmerge|.
+% \begin{macrocode}
+\newcommand{\AM@output}[1]{%
+% \end{macrocode}
+% For the following calculations we need to know the page size.
+% But since we are still before |\newpage| we must not set |\paper{width,height}|
+% and must not call |\AM@setpagedimen| now. This shall be done after |\newpage|.
+% However, to get the calculation right we set and use |\AM@page{width,height}|,
+% which will eventually (after the next |\newpage|) become the real page size.
+% \begin{macrocode}
+ \AM@getpagedimen
+ \ifdim\AM@pagewidth=\z@
+ \AM@pagewidth=210mm
+ \PackageWarningNoLine{pdfpages}{%
+ Erroneous page width of 0.0pt is corrected}%
+ \fi
+ \ifdim\AM@pageheight=\z@
+ \AM@pageheight=297mm
+ \PackageWarningNoLine{pdfpages}{%
+ Erroneous page height of 0.0pt is corrected}%
+ \fi
+% \end{macrocode}
+% Floats are unwanted here. Thus defer all floats until after |\includepdf|.
+% \par
+% 1) Floats which are already in \LaTeX's output routine shall be removed from
+% there and pushed onto |\@deferlist| or |\@dbldeferlist|.
+% \begin{macrocode}
+ \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
+ \gdef\@toplist{}%
+ \gdef\@botlist{}%
+ \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
+ \gdef\@dbltoplist{}%
+% \end{macrocode}
+% 2) Clear |\@deferlist| and |\@dbldeferlist|. But save them first
+% so they can be restored later.
+% \begin{macrocode}
+ \global\let\AM@deferlist\@deferlist
+ \gdef\@deferlist{}%
+ \global\let\AM@dbldeferlist\@dbldeferlist
+ \gdef\@dbldeferlist{}%
+% \end{macrocode}
+% Some drivers, like |ppnull|, need a hook to disable
+% |\includegraphics|.
+% \begin{macrocode}
+ \AM@disable@includegraphics
+% \end{macrocode}
+% Some macros may already be initialized by |\includepdfset|.
+% So do not reset them here.
+% \begin{macrocode}
+ \@ifundefined{AM@xnup}
+ {\def\AM@xnup{\@ne}\def\AM@ynup{\@ne}%
+ \def\AM@xnupminusi{\z@}\def\AM@ynupminusi{\z@}}{}%
+ \@ifundefined{AM@deltax}
+ {\def\AM@deltax{-\fboxrule}\def\AM@deltay{-\fboxrule}}{}%
+ \@ifundefined{AM@xoffset}
+ {\def\AM@xoffset{\z@}\def\AM@yoffset{\z@}}{}%
+ \def\AM@xpos{\z@}\def\AM@ypos{\z@}%
+% \end{macrocode}
+% Read in optional parameters.
+% \begin{macrocode}
+ \ifAM@pkg@draft \setkeys{Gin}{draft=true}%
+ \else \setkeys{Gin}{draft=false}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@landscape}}
+ {\def\AM@lscape@rot{90}%
+ \@ifundefined{AM@shortnupsyntax}{}
+ {\let\AM@temp\AM@xnup
+ \let\AM@xnup\AM@ynup
+ \let\AM@ynup\AM@temp}%
+ }{}%
+ \AM@setphantom
+ \ifthenelse{\boolean{AM@openright}}
+ {\AM@openright}{}%
+ \ifx\AM@signature\@empty\AM@filluppagelist
+ \else\AM@prepare@signature\AM@signaturetrue\AM@turnfalse\fi
+% \end{macrocode}
+% \begin{macrocode}
+ \@tempcnta=\AM@xnup\relax \advance\@tempcnta\m@ne
+ \edef\AM@xnupminusi{\the\@tempcnta}%
+ \@tempcnta=\AM@ynup\relax \advance\@tempcnta\m@ne
+ \edef\AM@ynupminusi{\the\@tempcnta}%
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@column}%
+ \and\not\boolean{AM@columnstrict}}
+ {\AM@getlastn{\AM@doclist}{\AM@nup}%
+ \edef\AM@lastndocs{\AM@lastnitems}%
+ \AM@getlastn{\AM@pagelist}{\AM@nup}%
+ \edef\AM@lastnpages{\AM@lastnitems}%
+ \AM@resort
+ \AM@count{\AM@pagelist}%
+ \expandafter\ifx\expandafter\\\AM@pagelist\\%
+ \edef\AM@pagelist{\AM@resortedpagelist}%
+ \edef\AM@doclist{\AM@resorteddoclist}%
+ \else
+ \edef\AM@pagelist{\AM@pagelist,\AM@resortedpagelist}%
+ \edef\AM@doclist{\AM@doclist,\AM@resorteddoclist}%
+ \fi}{}%
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@frame}}
+ {\global\let\AM@fbox\fbox}
+ {\global\let\AM@fbox\relax
+ \setlength{\fboxrule}{\z@}}%
+ \ifthenelse{\boolean{AM@reflect}}
+ {\global\let\AM@reflectbox\reflectbox}
+ {\global\let\AM@reflectbox\relax}%
+ \setbox\AM@pagebox\null
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@column}}
+ {\def\AM@xnupi{\@ne}%
+ \def\AM@ynupi{\z@}}
+ {\def\AM@xnupi{\z@}%
+ \def\AM@ynupi{\@ne}}%
+% \end{macrocode}
+% \begin{macrocode}
+ \AM@firstpagetrue
+% \end{macrocode}
+% \begin{macrocode}
+ \setlength{\fboxsep}{\z@}%
+% \end{macrocode}
+% Determine scaling factor:
+% The logical pages are scaled such, that they match on
+% one sheet of paper.
+% \begin{macrocode}
+ \@ifundefined{AM@pagetemplate}
+ {\AM@readfirst{\AM@pagelist}%
+ \edef\AM@page{\the\toks@}}
+ {\edef\AM@page{\AM@pagetemplate}}%
+ \AM@readfirst{\AM@doclist}%
+ \edef\AM@docname{\the\toks@}%
+ \AM@isphantom
+ \ifAM@noautoscale
+ \def\AM@globalscale{1}%
+ \else
+ \AM@split@options{Gin@noscale}{#1}%
+ \let\AM@filelist@save\@filelist
+ \ifAM@DVIoutput
+ \setbox\@tempboxa=\hbox{\rule{597pt}{845pt}}%
+ \else
+ \ifAM@templatesize
+ \setbox\@tempboxa=\hbox{%
+ \rotatebox{\AM@lscape@rot}{\copy\AM@templatesizebox}}%
+ \else
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, angle=\AM@lscape@rot]}%
+ \setbox\@tempboxa=\hbox{%
+ \expandafter\includegraphics\AM@opts{\AM@docname}}%
+ \fi
+ \fi
+% \end{macrocode}
+% Fit papersize.
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@fitpaper}}{
+ \setlength{\AM@pagewidth}{\wd\@tempboxa}%
+ \setlength{\AM@pageheight}{\ht\@tempboxa + \dp\@tempboxa}%
+ }{}%
+% \end{macrocode}
+% Calculate required scaling in horizontal direction.
+% \begin{macrocode}
+ \def\AM@xscale{%
+ (\AM@pagewidth - \tw@\fboxrule*\AM@xnup
+ - \AM@deltax * \AM@xnupminusi) /
+ (\AM@xnup * \real{\strip@pt\wd\@tempboxa})
+ }%
+ \setlength{\@tempdima}{\AM@xscale}%
+ \edef\AM@xscale{\strip@pt\@tempdima}%
+% \end{macrocode}
+% Calculate required scaling in vertical direction.
+% \begin{macrocode}
+ \setlength{\@tempdimb}{\ht\@tempboxa + \dp\@tempboxa}%
+ \def\AM@yscale{
+ (\AM@pageheight - \tw@\fboxrule*\AM@ynup
+ - \AM@deltay *\AM@ynupminusi) /
+ (\AM@ynup * \real{\strip@pt\@tempdimb})
+ }%
+ \setlength{\@tempdima}{\AM@yscale}%
+ \edef\AM@yscale{\strip@pt\@tempdima}%
+% \end{macrocode}
+% The lower value of |\AM@xscale| and |\AM@yscale| is used
+% as the overall scaling factor |\AM@globalscale|.
+% \begin{macrocode}
+ \@tempdima=\AM@xscale\p@
+ \@tempdimb=\AM@yscale\p@
+ \ifdim\@tempdima<\@tempdimb
+ \let\AM@globalscale\AM@xscale
+ \else
+ \let\AM@globalscale\AM@yscale
+ \fi
+ \fi
+% \end{macrocode}
+% Determine horizontal and vertical margins.
+% |\AM@xoffset| and |\AM@yoffset| are \textit{not}
+% taken into account for this calculation.
+% \begin{macrocode}
+ \let\AM@filelist@save\@filelist
+ \AM@split@options{Gin}{#1}%
+ \ifAM@templatesize
+ \setbox\@tempboxa=\hbox{%
+ \scalebox{\AM@scale@factor}{\copy\AM@templatesizebox}}%
+ \setbox\@tempboxa=\hbox{%
+ \scalebox{\AM@globalscale}{\copy\@tempboxa}}%
+ \setbox\@tempboxa=\hbox{%
+ \rotatebox{\AM@lscape@rot}{\copy\@tempboxa}}%
+ \else
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, scale=\AM@globalscale,
+ angle=\AM@lscape@rot]}%
+ \setbox\@tempboxa=\hbox{%
+ \expandafter\includegraphics\AM@opts{\AM@docname}}%
+ \fi
+ \let\@filelist\AM@filelist@save
+ \edef\AM@templatewidth{\the\wd\@tempboxa}%
+ \setlength{\@tempdima}{\ht\@tempboxa + \dp\@tempboxa}%
+ \edef\AM@templateheight{\the\@tempdima}%
+ \setlength{\@tempdimb}{\ht\@tempboxa + \dp\@tempboxa}%
+ \def\AM@xmargin{%
+ (\AM@pagewidth - (\wd\@tempboxa+\tw@\fboxrule)*\AM@xnup
+ - \AM@deltax * \AM@xnupminusi) * \real{.5}%
+ }%
+ \def\AM@ymargin{%
+ (\AM@pageheight - (\@tempdimb+\tw@\fboxrule)*\AM@ynup
+ - \AM@deltay * \AM@ynupminusi) * \real{.5}%
+ }%
+ \setlength{\@tempdima}{\AM@xmargin}%
+ \edef\AM@xmargin{\the\@tempdima}%
+ \setlength{\@tempdima}{\AM@ymargin}%
+ \edef\AM@ymargin{\the\@tempdima}%
+% \end{macrocode}
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@landscape}}
+ {\edef\AM@temp{\AM@xnup}%
+ \edef\AM@xnup{\AM@ynup}%
+ \edef\AM@ynup{\AM@temp}}
+ {}%
+ \ifAM@signature
+ \ifAM@landscape\AM@sigrotatefalse\else\AM@sigrotatetrue\fi
+ \fi
+% \end{macrocode}
+% This loop arranges one or more \PDF\ pages onto each sheet
+% of paper.
+% \begin{macrocode}
+ \setboolean{AM@endoflist}{false}%
+ \newpage
+ \whiledo{\not\boolean{AM@endoflist}}{%
+ \AM@getfirst{\AM@pagelist}%
+ \edef\AM@page{\the\toks@}%
+ \AM@isphantom
+ \@tempcnta=\AM@page\relax
+ \edef\AM@linktodoc@page{\the\@tempcnta}%
+ \advance\@tempcnta\m@ne
+ \edef\AM@linktodoc@page@m@ne{\the\@tempcnta}%
+ \AM@getfirst{\AM@doclist}%
+ \edef\AM@docname{\the\toks@}%
+ \ifAM@linkfilename
+ \else
+ \let\AM@linkfilename\AM@docname
+ \fi
+ \ifx\@empty\AM@linkname@option \edef\AM@linkname{\the\toks@}%
+ \else \edef\AM@linkname{\AM@linkname@option} \fi
+% \end{macrocode}
+% Each logical page has an element number of
+% |(\AM@xnupi,\AM@ynupi)|, where |(1,1)| indicates the upper
+% left position.
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@column}}
+ {\@tempcnta=\AM@ynupi\relax
+ \@tempcntb=\AM@ynup\relax
+ \advance\@tempcnta\@ne
+ \ifnum\@tempcnta>\@tempcntb
+ \@tempcnta=\@ne
+ \@tempcntb=\AM@xnupi\relax
+ \advance\@tempcntb\@ne
+ \edef\AM@xnupi{\the\@tempcntb}%
+ \fi
+ \edef\AM@ynupi{\the\@tempcnta}%
+ \@tempcnta=\AM@xnupi\relax
+ \@tempcntb=\AM@xnup\relax
+ \ifnum\@tempcnta>\@tempcntb
+ \def\AM@xnupi{\@ne}%
+ \AM@newpagetrue
+ \fi
+ }
+ {\@tempcnta=\AM@xnupi\relax
+ \@tempcntb=\AM@xnup\relax
+ \advance\@tempcnta\@ne
+ \ifnum\@tempcnta>\@tempcntb
+ \@tempcnta=\@ne
+ \@tempcntb=\AM@ynupi\relax
+ \advance\@tempcntb\@ne
+ \edef\AM@ynupi{\the\@tempcntb}%
+ \fi
+ \edef\AM@xnupi{\the\@tempcnta}%
+ \@tempcnta=\AM@ynupi\relax
+ \@tempcntb=\AM@ynup\relax
+ \ifnum\@tempcnta>\@tempcntb
+ \def\AM@ynupi{\@ne}%
+ \AM@newpagetrue
+ \fi
+ }%
+% \end{macrocode}
+% \begin{macrocode}
+ \ifAM@newpage
+ \newpage
+ \AM@newpagefalse
+ \fi
+% \end{macrocode}
+% Load next page and verify if it has the same page size as the
+% page template. If not, adjust the scale |\AM@localscale| and
+% the local offset |\AM@localxoff| and |\AM@localyoff|.
+% \begin{macrocode}
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, scale=\AM@globalscale,
+ angle=\AM@lscape@rot]}%
+ \setbox\@tempboxa=\hbox{%
+ \expandafter\includegraphics\AM@opts{\AM@docname}}%
+ \edef\AM@localwd{\the\wd\@tempboxa}%
+ \setlength{\@tempdima}{\ht\@tempboxa + \dp\@tempboxa}%
+ \edef\AM@localht{\the\@tempdima}%
+ \AM@rescalefalse
+ \ifdim\AM@localwd=\AM@templatewidth \else \AM@rescaletrue \fi
+ \ifdim\AM@localht=\AM@templateheight \else \AM@rescaletrue \fi
+ \def\AM@localxoff{\z@}%
+ \def\AM@localyoff{\z@}%
+ \def\AM@rotateoversize{0}%
+ \def\AM@localscale{\p@}%
+ \ifAM@rescale
+ \ifthenelse{\lengthtest{\AM@localwd<\AM@templatewidth} \and
+ \lengthtest{\AM@localht<\AM@templateheight}}{%
+% \end{macrocode}
+% Smaller pages are \emph{not} scaled up, just their local offset
+% is adjusted.
+% \begin{macrocode}
+ \setlength{\@tempdima}{(\AM@templatewidth - \AM@localwd)
+ * \real{.5}}%
+ \edef\AM@localxoff{\the\@tempdima}%
+ \setlength{\@tempdima}{(\AM@templateheight - \AM@localht)
+ * \real{.5}}%
+ \edef\AM@localyoff{\the\@tempdima}%
+ }{%
+% \end{macrocode}
+% Larger pages are scaled down and their local offset is adjusted.
+% \begin{macrocode}
+ \ifAM@rotateoversize
+ \def\AM@rotateoversize{90}%
+ \let\AM@filelist@save\@filelist
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, scale=\AM@globalscale,
+ angle=\AM@lscape@rot, angle=90]}%
+ \setbox\@tempboxa=\hbox{%
+ \expandafter\includegraphics\AM@opts{\AM@docname}}%
+ \let\@filelist\AM@filelist@save
+ \edef\AM@localwd{\the\wd\@tempboxa}%
+ \setlength{\@tempdima}{\ht\@tempboxa + \dp\@tempboxa}%
+ \edef\AM@localht{\the\@tempdima}%
+ \fi
+ \setlength{\@tempdima}
+ {\p@ * \ratio{\AM@templatewidth}{\AM@localwd}}%
+ \edef\AM@localxscale{\the\@tempdima}%
+ \setlength{\@tempdima}
+ {\p@ * \ratio{\AM@templateheight}{\AM@localht}}%
+ \edef\AM@localyscale{\the\@tempdima}%
+ \ifdim\AM@localxscale<\AM@localyscale
+ \let\AM@localscale\AM@localxscale
+ \setlength{\@tempdima}{\AM@localxscale}%
+ \setlength{\@tempdima}{(\AM@templateheight -
+ \AM@localht * \real{\strip@pt\@tempdima}) * \real{.5}}%
+ \edef\AM@localyoff{\the\@tempdima}%
+ \else
+ \let\AM@localscale\AM@localyscale
+ \setlength{\@tempdima}{\AM@localyscale}%
+ \setlength{\@tempdima}{(\AM@templatewidth -
+ \AM@localwd * \real{\strip@pt\@tempdima}) * \real{.5}}%
+ \edef\AM@localxoff{\the\@tempdima}%
+ \fi
+ }%
+ \fi
+ \setlength{\@tempdima}{\AM@localscale}%
+ \edef\AM@localscale{\strip@pt\@tempdima}%
+% \end{macrocode}
+% The above calculation are wrong if |noautoscale| is used.
+% Thus reset values here.
+% \begin{macrocode}
+ \ifAM@noautoscale
+ \def\AM@localxoff{\z@}%
+ \def\AM@localyoff{\z@}%
+ \def\AM@localscale{1}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \let\AM@filelist@save\@filelist
+ \AM@split@options{Gin}{#1}%
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, scale=\AM@globalscale,
+ angle=\AM@lscape@rot]}%
+ \setbox\@tempboxa=\hbox{%
+ \expandafter\includegraphics\AM@opts{\AM@docname}}%
+ \let\@filelist\AM@filelist@save
+ \setlength{\@tempdimc}{\ht\@tempboxa + \dp\@tempboxa}%
+% \end{macrocode}
+% Eso-pic set the origin of the coordinate system by default to the
+% lower left corner which is what pdfpages assumes. However, with the
+% option |texcoord| eso-pic sets the origin to the upper left corner.
+% Let's take care of this.
+% \begin{macrocode}
+ \edef\AM@texcoord{%
+ \ifESO@texcoord
+ -\AM@pageheight
+ \else
+ \z@
+ \fi
+ }%
+% \end{macrocode}
+% Determine the position (coordinates) of the logical pages.
+% These are |\AM@xpos| and |\AM@ypos|.
+% \begin{macrocode}
+ \def\AM@add{+}%
+ \if@twoside\ifodd\c@page\else\def\AM@add{-}\fi\fi
+ \setlength{\@tempdimb}{\ht\@tempboxa + \dp\@tempboxa}%
+ \ifthenelse{\boolean{AM@landscape}}
+ {\def\AM@xpos{%
+ \AM@xmargin \AM@add\AM@xoffset + \AM@localxoff +
+ (\AM@templatewidth + \AM@deltax + \tw@\fboxrule) *
+ (\AM@ynupi - 1)
+ }%
+ \def\AM@ypos{%
+ \AM@texcoord +
+ \AM@ymargin + \AM@yoffset + \AM@localyoff +
+ (\AM@templateheight + \AM@deltay + \tw@\fboxrule) *
+ (\AM@xnupi - 1)
+ }%
+ }
+ {\def\AM@xpos{%
+ \AM@xmargin \AM@add\AM@xoffset + \AM@localxoff +
+ (\AM@templatewidth + \AM@deltax + \tw@\fboxrule) *
+ (\AM@xnupi - 1)
+ }%
+ \def\AM@ypos{%
+ \AM@texcoord +
+ \AM@ymargin + \AM@yoffset + \AM@localyoff +
+ (\AM@templateheight + \AM@deltay + \tw@\fboxrule) *
+ (\AM@ynup-\AM@ynupi)
+ }%
+ }%
+ \setlength{\@tempdima}{\AM@xpos}%
+ \edef\AM@xpos{\strip@pt\@tempdima}%
+ \setlength{\@tempdima}{\AM@ypos}%
+ \edef\AM@ypos{\strip@pt\@tempdima}%
+ \setlength{\fboxsep}{\z@}%
+% \end{macrocode}
+% Calculate |fitr| coordinates, if |linkfit=region|.
+% \begin{macrocode}
+ \AM@region@calc
+% \end{macrocode}
+% Ship out page.
+% \begin{macrocode}
+ \ifnum\AM@xnupi=1
+ \ifnum\AM@ynupi=1
+ \ifAM@reflectall \setbox\AM@pagebox\null \fi
+ \fi
+ \fi
+ \ifAM@phantompage
+ \def\AM@shippage{}%
+ \else
+ \AM@split@options{Gin}{#1}%
+ \edef\AM@opts{[\AM@disable@width@height,\the\@temptokena,
+ page=\AM@page, scale=\AM@globalscale,
+ scale=\AM@localscale,
+ \ifAM@sigrotate angle=180,\fi
+ \ifAM@doublepagestwist\ifAM@doublepagestmp
+ angle=180,\fi\fi
+ angle=\AM@rotateoversize, angle=\AM@lscape@rot]}%
+ \edef\AM@shippage{%
+ \noexpand\put(\AM@xpos,\AM@ypos){%
+ \noexpand\raisebox{\dp\@tempboxa}{%
+% \end{macrocode}
+% Raise the target of a link to the top of the included page.
+% \begin{macrocode}
+ \noexpand\raise \ht\@tempboxa \hbox{\AM@hyper@begin@i}%
+% \end{macrocode}
+% \begin{macrocode}
+ \AM@hyper@begin@ii\noexpand\AM@fbox{%
+ \noexpand\AM@ARBug@hook
+ \noexpand\AM@reflectbox{%
+ \expandafter\noexpand\expandafter
+ \includegraphics\AM@opts{\AM@docname}}}%
+ \AM@hyper@end}}%
+ }%
+ \fi
+ \ifAM@doublepagestwist
+ \ifAM@doublepagestmpi
+ \ifAM@doublepagestwistx\AM@doublepagestmpifalse\fi
+ \ifAM@doublepagestmp\AM@doublepagestmpfalse
+ \else\AM@doublepagestmptrue\fi
+ \else\AM@doublepagestmpitrue\fi
+ \fi
+ \AM@AddToShipoutPicture{\setlength{\unitlength}{\p@}%
+ \global\let\AM@filelist@save\@filelist}%
+% \end{macrocode}
+% Adjust paper size:
+% After |\newpage| we may finally set |\paper{width,height}| and call
+% |\AM@setpagedimen|.
+% \begin{macrocode}
+ \ifthenelse{\boolean{AM@fitpaper}}{
+ \setlength{\paperwidth}{\AM@pagewidth}%
+ \setlength{\paperheight}{\AM@pageheight}%
+ \AM@fitpaper@special
+ \AM@setpagedimen
+ \ifAM@memoir
+ \setlength{\stockwidth}{\AM@pagewidth}%
+ \setlength{\stockheight}{\AM@pageheight}%
+ \setlength{\trimtop}{0pt}%
+ \setlength{\trimedge}{0pt}%
+ \fi
+ }{}
+% \end{macrocode}
+% |eso-pic| needs |\paperwidth| and |\paperheight|, which may
+% not be defined, e.g. with |minimal.cls|.
+% \begin{macrocode}
+ \ifdim\paperwidth=\z@
+ \let\paperwidth\AM@pagewidth
+ \fi
+ \ifdim\paperheight=\z@
+ \let\paperheight\AM@pageheight
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \if@twocolumn
+ \@twocolumnfalse
+ \let\AM@twocolumn\relax
+ \fi
+% \end{macrocode}
+% |\AM@pagebox| is only used for option |reflect|, which was added
+% lately. Probabley it would be better to use |\AM@pagebox| in
+% all cases?
+% \begin{macrocode}
+ \ifAM@reflectall
+ \begin{lrbox}{\AM@pagebox}
+ \global\let\AM@filelist@save\@filelist
+ \usebox{\AM@pagebox}\AM@shippage
+ \global\let\@filelist\AM@filelist@save
+ \end{lrbox}
+ \else
+ \expandafter\AM@AddToShipoutPicture\expandafter{%
+ \AM@shippage
+ \global\let\@filelist\AM@filelist@save
+ }%
+ \fi
+ \AM@toclof{\AM@page}%
+ \ifnum\AM@xnupi=\AM@xnup\relax
+ \ifnum\AM@ynupi=\AM@ynup\relax
+ \begingroup\AM@pagecommand\endgroup
+ \hskip\z@
+ \ifthenelse{\boolean{AM@turn}\AND\boolean{AM@landscape}}{%
+ \AM@setRotate
+ }{}%
+ \AM@AddToShipoutPicture{%
+ \begingroup\AM@picturecommand\endgroup}%
+ \ifAM@firstpage
+ \AM@AddToShipoutPicture{%
+ \begingroup\AM@picturecommandstar\endgroup}%
+ \AM@firstpagefalse
+ \fi
+ \ifAM@reflectall
+ \AM@AddToShipoutPicture{%
+ \hskip\AM@pagewidth
+ \reflectbox{\usebox\AM@pagebox}%
+ \global\let\@filelist\AM@filelist@save
+ }%
+ \AM@ClearShipoutPicture
+ \fi
+% \end{macrocode}
+% When creating signatures, every second page must be rotated
+% by $180^{\circ}$ and therefore the xoffset must be multiplied
+% by $-1$.
+% \begin{macrocode}
+ \ifAM@signature
+ \ifAM@sigrotate\AM@sigrotatefalse\else\AM@sigrotatetrue\fi
+ \@tempdima=\AM@xoffset\relax
+ \multiply\@tempdima\m@ne
+ \edef\AM@xoffset{\the\@tempdima}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ }% whiledo
+ \global\let\@deferlist\AM@deferlist
+ \global\let\@dbldeferlist\AM@dbldeferlist
+ \ifx\AM@twocolumn\relax
+ \@twocolumntrue
+ \@firstcolumnfalse
+ \fi
+ \newpage
+ \ifthenelse{\boolean{AM@turn}\AND\boolean{AM@landscape}}{%
+ \AM@resetRotate
+ }{}
+}% AM@output
+% \end{macrocode}
+% \macro{\AM@readlist}
+% \macro{\AM@readlisti}
+% \macro{\AM@checkrange}
+% \macro{\AM@checklast}
+% \macro{\AM@checkpagenumber}
+% \macro{\AM@setnewdocname}
+% \macro{\AM@append}
+% These macros parse a comma separated list, which contains
+% page numbers, page ranges, and/or document names. The
+% results are stored in two macros: |\AM@pagelist| which
+% contains only page numbers (page ranges are split into
+% several page numbers) and |\AM@doclist| which contains
+% the document names; one name for each page number in
+% |\AM@pagelist|.
+% \begin{macrocode}
+\newif\ifAM@defaultone
+\newcommand*{\AM@readlist}[1]{%
+ \AM@defaultonefalse
+ \def\AM@pagelist{}%
+ \def\AM@doclist{}%
+ \AM@readlisti#1,\END,
+ \ifAM@defaultone\AM@append{1}\fi
+ \edef\AM@doclist{\expandafter\@gobble\AM@doclist\@empty}%
+ \edef\AM@pagelist{\expandafter\@gobble\AM@pagelist\@empty}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@readlisti}{}
+\def\AM@readlisti#1,{%
+ \ifx\AM@currentdocname\relax
+ \else
+ \AM@getpagecount
+ \fi
+ \def\AM@temp{#1}%
+ \ifx\END#1
+ \else
+ \AM@checkrange#1-\END
+ \expandafter\AM@readlisti
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@checkrange}{}
+\def\AM@checkrange#1-#2\END{%
+ \edef\AM@tempi{\AM@trim@space{#1}}%
+ \ifx\\#2\\%
+ \AM@checkinteger{\AM@tempi}%
+ \ifAM@integer
+ \AM@checkpagenumber{\AM@tempi}%
+ \AM@append{\AM@tempi}%
+ \else
+ \expandafter\ifx\expandafter\\\AM@tempi\\\AM@append{}%
+ \else\AM@setnewdocname{\AM@tempi}\fi
+ \fi
+ \else
+ \expandafter\ifx\expandafter\\\AM@tempi\\%
+ \@tempcnta=1\relax
+ \AM@checklast#2\END
+ \else
+ \def\AM@cmp{last}%
+ \ifx\AM@cmp\AM@tempi
+ \@tempcnta=\AM@pagecount\relax
+ \AM@checklast#2\END
+ \else
+ \AM@checkinteger{\AM@tempi}%
+ \ifAM@integer
+ \@tempcnta=\AM@tempi\relax
+ \AM@checkpagenumber{\the\@tempcnta}%
+ \AM@checklast#2\END
+ \else
+ \AM@setnewdocname{\AM@temp}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@checklast}{}
+\def\AM@checklast#1-\END{%
+ \edef\AM@tempii{\AM@trim@space{#1}}%
+ \expandafter\ifx\expandafter\\\AM@tempii\\
+ \@tempcntb=\AM@pagecount\relax
+ \ifAM@DVIoutput
+ \ifnum\AM@pagecount=1
+ \@tempcntb\@tempcnta
+ \fi
+ \fi
+ \advance\@tempcntb\@ne
+ \whiledo{\@tempcnta<\@tempcntb}{%
+ \AM@append{\the\@tempcnta}%
+ \advance\@tempcnta\@ne
+ }%
+ \else
+ \def\AM@cmp{last}%
+ \ifx\AM@cmp\AM@tempii
+ \let\AM@tempii\AM@pagecount
+ \fi
+ \AM@checkinteger{\AM@tempii}%
+ \ifAM@integer
+ \@tempcntb=\AM@tempii\relax
+ \AM@checkpagenumber{\the\@tempcntb}%
+ \ifnum\@tempcnta<\@tempcntb \def\AM@rel{<}\def\AM@inc{\@ne}%
+ \else \def\AM@rel{>}\def\AM@inc{\m@ne}\fi
+ \advance\@tempcntb\AM@inc
+ \whiledo{\@tempcnta\AM@rel\@tempcntb}{%
+ \AM@append{\the\@tempcnta}%
+ \advance\@tempcnta\AM@inc
+ }%
+ \else
+ \AM@setnewdocname{\AM@temp}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand*{\AM@checkpagenumber}[1]{%
+ \ifnum#1>\AM@pagecount\relax
+ \ifthenelse{\boolean{AM@pkg@draft} \and \boolean{AM@survey}}{%
+ }{%
+ \PackageError{pdfpages}
+ {Page #1 of `\AM@currentdocname' does not exist}
+ {You have set a wrong page number in the `pages' option.
+ Document \MessageBreak `\AM@currentdocname' does not
+ have #1 pages.}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\AM@setnewdocname}[1]{%
+ \ifAM@defaultone
+ \AM@append{1}%
+ \fi
+ \edef\AM@temp{\AM@trim@space{#1}}%
+ \AM@findfile{\AM@temp}%
+ \AM@defaultonetrue
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*{\AM@append}[1]{%
+ \edef\AM@doclist{\AM@doclist,\AM@currentdocname}%
+ \edef\AM@pagelist{\AM@pagelist,#1}%
+ \ifAM@doublepages
+ \edef\AM@doclist{\AM@doclist,\AM@currentdocname}%
+ \edef\AM@pagelist{\AM@pagelist,#1}%
+ \fi
+ \ifAM@duplicatepages
+ \count@=0
+ \loop
+ \advance\count@ 1
+ \ifnum\count@<\AM@nduplicatepages
+ \edef\AM@doclist{\AM@doclist,\AM@currentdocname}%
+ \edef\AM@pagelist{\AM@pagelist,#1}%
+ \repeat
+ \fi
+ \AM@defaultonefalse
+}
+% \end{macrocode}
+% \macro{\AM@getfirst}
+% \macro{\AM@getfirsti}
+% \macro{\AM@getfirstii}
+% Parameter |#1| must be a macro containing a csv-list.
+% |\AM@getfirst| removes the first item of this list
+% \textit{and} stores it in |\toks@|.
+% \begin{macrocode}
+\newif\ifAM@endoflist\AM@endoflistfalse
+\newcommand{\AM@getfirst}{}
+\def\AM@getfirst#1{\expandafter\AM@getfirsti#1,\END#1\END}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@getfirsti}{}
+\def\AM@getfirsti#1,#2\END#3\END{%
+ \edef#3{#2}%
+ \ifx\\#2\\%
+ \setboolean{AM@endoflist}{true}%
+ \def#3{}%
+ \else
+ \edef#3{\AM@getfirstii#2\END}%
+ \fi
+ \toks@{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@getfirstii}{}
+\def\AM@getfirstii#1,\END{#1}
+% \end{macrocode}
+% \macro{\AM@readfirst}
+% Read first item of a list and store it in |\toks@|.
+% (Do not remove it.)
+% \begin{macrocode}
+\newcommand{\AM@readfirst}{}
+\newcommand{\AM@readfirsti}{}
+\def\AM@readfirst#1{\expandafter\AM@readfirsti#1,\END}
+\def\AM@readfirsti#1,#2\END{\toks@{#1}}
+% \end{macrocode}
+% \macro{\AM@getlast}
+% \macro{\AM@getlasti}
+% \macro{\AM@getlastn}
+% These macros are similar to |\AM@getfirst|. |\AM@getlast|
+% stores the last item in |\AM@lastitem| and removes it
+% from the list. |\AM@getlastn| does the same with the
+% last |n| items which are stored in |\AM@lastnitems|.
+% \begin{macrocode}
+\newcommand{\AM@getlast}{}
+\def\AM@getlast#1{%
+ \let\AM@temp\relax
+ \expandafter\AM@getlasti#1,\END
+ \@ifundefined{AM@temp}{\def#1{}}{\edef#1{\AM@temp}}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@ReturnAfterFi#1\fi{\fi#1}
+\def\AM@ReturnAfterFiFi#1\fi\fi{\fi\fi#1}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@getlasti}{}
+\def\AM@getlasti#1,#2\END{%
+ \ifx\\#2\\%
+ \def\AM@lastitem{#1}%
+ \else
+ \@ifundefined{AM@temp}
+ {\edef\AM@temp{#1}}
+ {\edef\AM@temp{\AM@temp,#1}}%
+ \AM@ReturnAfterFi{\AM@getlasti#2\END}%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@getlastn}{}
+\def\AM@getlastn#1#2{%
+ \let\AM@templist\relax
+ \@tempcnta=\z@
+ \loop
+ \ifnum\@tempcnta<#2
+ \AM@getlast{#1}%
+ \@ifundefined{AM@templist}
+ {\edef\AM@templist{\AM@lastitem}}
+ {\edef\AM@templist{\AM@lastitem,\AM@templist}}%
+ \advance\@tempcnta\@ne
+ \repeat
+ \edef\AM@lastnitems{\AM@templist}%
+}
+% \end{macrocode}
+% \macro{\AM@split@firstn}
+% Removes the first |n=#2| items from the cvs=list, which
+% is specified by the name of a macro in |#1|. These |n|
+% items are split into two lists with the names |#1@firstn|
+% and |#1@lastn|. The latter one is sorted backwards. This
+% is needed for a faster processing of the |signature| option.
+% \begin{macrocode}
+\newcommand{\AM@split@firstn}{}
+\def\AM@split@firstn#1#2{%
+ \edef\AM@tmp{\expandafter\@gobble\string#1@firstn}%
+ \AM@getfirst{#1}%
+ \expandafter\edef\csname\AM@tmp\endcsname{\the\toks@}%
+ \@tempcnta=\@ne
+ \@tempcntb=#2 \divide\@tempcntb\tw@
+ \loop\ifnum\@tempcnta<\@tempcntb
+ \AM@getfirst{#1}%
+ \expandafter\edef\csname\AM@tmp\endcsname
+ {\@nameuse{\AM@tmp},\the\toks@}%
+ \advance\@tempcnta\@ne
+ \repeat
+ \edef\AM@tmp{\expandafter\@gobble\string#1@lastn}%
+ \AM@getfirst{#1}%
+ \expandafter\edef\csname\AM@tmp\endcsname{\the\toks@}%
+ \@tempcnta=\@ne
+ \loop\ifnum\@tempcnta<\@tempcntb
+ \AM@getfirst{#1}%
+ \expandafter\edef\csname\AM@tmp\endcsname
+ {\the\toks@,\@nameuse{\AM@tmp}}%
+ \advance\@tempcnta\@ne
+ \repeat
+}
+% \end{macrocode}
+% \macro{\AM@count}
+% \macro{\AM@counti}
+% Parameter |#1| must be a macro containing a csv-list.
+% |\AM@count| counts the items of this list, but it does
+% not count the last \textit{empty} items of this list.
+% The number of items is stored in |\@tempcnta|.
+% \begin{macrocode}
+\newif\ifAM@again\AM@againtrue
+\newcommand{\AM@count}{}
+\def\AM@count#1{%
+ \edef\AM@templist{#1}%
+ \loop
+ \AM@getlast{\AM@templist}%
+ \expandafter\ifx\expandafter\\\AM@lastitem\\%
+ \else
+ \AM@againfalse
+ \expandafter\ifx\expandafter\\\AM@templist\\%
+ \edef\AM@templist{\AM@lastitem}%
+ \else
+ \edef\AM@templist{\AM@templist,\AM@lastitem}%
+ \fi
+ \@tempcnta=\z@
+ \expandafter\AM@counti\AM@templist,\END,
+ \fi
+ \ifAM@again
+ \repeat
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@counti}{}
+\def\AM@counti#1,{%
+ \ifx\END#1
+ \else
+ \advance\@tempcnta\@ne
+ \expandafter\AM@counti
+ \fi
+}
+% \end{macrocode}
+% \macro{\AM@resort}
+% To allow a more pleasant output in |column| mode, the
+% logical pages get resorted if they do not fill the
+% whole sheet of paper.
+% |\AM@lastnpages| must contain the pages and
+% |\AM@lastndocs| the corresponding documents which
+% should get resorted.
+%
+% E.g.: After resorting a page that contains only 5 of 9
+% logical pages, it looks like (b) instead of (a).
+%
+% \smallskip\par
+% \begin{minipage}{110pt}
+% \centering
+% \begin{tabular}{|c|c|c|}\hline
+% 1 & 4 & \phantom{6}\\\hline
+% 2 & 5 &\\\hline
+% 3 &&\\\hline
+% \end{tabular}\smallskip\par
+% (a)~|columnstrict=false|
+% \end{minipage}
+% \hskip15pt
+% \begin{minipage}{110pt}
+% \centering
+% \begin{tabular}{|c|c|c|}\hline
+% 1 & 3 & 5\\\hline
+% 2 & 4 & \\\hline
+% &&\\\hline
+% \end{tabular}\smallskip\par
+% (b)~|columnstrict=true|
+% \end{minipage}
+% \smallskip
+% \begin{macrocode}
+\newif\ifAM@resort@end\AM@resort@endfalse
+\newcommand{\AM@resort}{}
+\def\AM@resort{%
+ \def\AM@resortedpagelist{}%
+ \def\AM@resorteddoclist{}%
+ \def\AM@xnupi{\@ne}%
+ \def\AM@ynupi{\@ne}%
+% \end{macrocode}
+% For the following algorithm a `last page' is
+% defined, which has the position (|xnuplast| , |ynuplast|).
+% It is marked with $\times$ in the figure below.
+% \smallskip\par
+% \begin{minipage}{110pt}
+% \centering
+% \begin{tabular}{|c|c|c|}\hline
+% 1 & 3 & 5\\\hline
+% 2 & 4 & $\times$\\\hline
+% &&\\\hline
+% \end{tabular}\smallskip\par
+% \end{minipage}
+% \begin{macrocode}
+ \AM@count{\AM@lastnpages}%
+ \def\AM@xnuplast{%
+ \the\@tempcnta - (\the\@tempcnta / \AM@xnup * \AM@xnup) + 1}%
+ \def\AM@ynuplast{1 + (\the\@tempcnta / \AM@xnup)}%
+ \setlength{\@tempdima}{\p@*(\AM@xnuplast)}%
+ \edef\AM@xnuplast{\strip@pt\@tempdima}%
+ \setlength{\@tempdima}{\p@*(\AM@ynuplast)}%
+ \edef\AM@ynuplast{\strip@pt\@tempdima}%
+% \end{macrocode}
+% \begin{macrocode}
+ \whiledo{\not\boolean{AM@resort@end}}{%
+ \@tempcnta=\AM@ynupi\relax
+ \@tempcntb=\AM@ynuplast\relax
+ \ifnum\@tempcnta=\@tempcntb
+ \@tempcnta=\AM@xnupi\relax
+ \@tempcntb=\AM@xnuplast\relax
+ \ifnum\@tempcnta<\@tempcntb
+ \AM@getfirst{\AM@lastndocs}%
+ \edef\AM@firstdocitem{\the\toks@}%
+ \AM@getfirst{\AM@lastnpages}%
+ \edef\AM@resortedpagelist{\AM@resortedpagelist,\the\toks@}%
+ \edef\AM@resorteddoclist{%
+ \AM@resorteddoclist,\AM@firstdocitem}%
+ \else
+ \edef\AM@resortedpagelist{\AM@resortedpagelist,}%
+ \edef\AM@resorteddoclist{\AM@resorteddoclist,\AM@phantomdoc}%
+ \fi
+ \else
+ \ifnum\@tempcnta<\@tempcntb
+ \AM@getfirst{\AM@lastndocs}%
+ \edef\AM@firstdocitem{\the\toks@}%
+ \AM@getfirst{\AM@lastnpages}%
+ \edef\AM@resortedpagelist{\AM@resortedpagelist,\the\toks@}%
+ \edef\AM@resorteddoclist{\AM@resorteddoclist,\AM@firstdocitem}%
+ \else
+ \edef\AM@resortedpagelist{\AM@resortedpagelist,}%
+ \edef\AM@resorteddoclist{\AM@resorteddoclist,\AM@phantomdoc}%
+ \fi
+ \fi
+ \@tempcnta=\AM@ynupi\relax
+ \advance\@tempcnta\@ne
+ \edef\AM@ynupi{\the\@tempcnta}%
+ \@tempcntb=\AM@ynup\relax
+ \ifnum\@tempcnta>\@tempcntb
+ \@tempcntb=\AM@xnupi\relax
+ \advance\@tempcntb\@ne
+ \edef\AM@xnupi{\the\@tempcntb}%
+ \def\AM@ynupi{\@ne}%
+ \@tempcnta=\AM@xnup\relax
+ \ifnum\@tempcntb>\@tempcnta
+ \setboolean{AM@resort@end}{true}%
+ \fi
+ \fi
+ }%
+ \edef\AM@resortedpagelist{\expandafter\@gobble\AM@resortedpagelist}%
+ \edef\AM@resorteddoclist{\expandafter\@gobble\AM@resorteddoclist}%
+}
+% \end{macrocode}
+% \macro{\AM@split@options}
+% \macro{\AM@split@optionsi}
+% \macro{\AM@split@oprionsii}
+% Extracts options from the options list (|#2|) depending
+% on the namespace (|#1|). Possible values for |#1| are:
+% |pdfpages| (options concerning pdfpages), |Gin| (options
+% concerning graphicx) and |Gin@noscale| (options concerning
+% graphicx, omitting the |scale| options). The extracted options
+% are stored in |@temptokena|.
+% \begin{macrocode}
+\newif\ifAM@pdfpages@options
+\newcommand{\AM@split@options}{}
+\def\AM@split@options#1#2{%
+ \def\AM@param{#1}%
+ \def\AM@scale@factor{1}%
+ \@temptokena{}%
+ \AM@split@optionsi#2,\END,
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@split@optionsi#1,{%
+ \ifx\END#1
+ \else
+ \AM@pdfpages@optionsfalse \AM@scalefalse
+ \AM@split@optionsii#1=\END
+ \ifthenelse{\equal{\AM@param}{pdfpages}}
+ {\ifAM@pdfpages@options
+ \@temptokena\expandafter{\the\@temptokena,#1}%
+ \fi}{}%
+ \ifthenelse{\equal{\AM@param}{Gin}}
+ {\ifAM@pdfpages@options\else
+ \@temptokena\expandafter{\the\@temptokena,#1}%
+ \fi}{}%
+ \ifthenelse{\equal{\AM@param}{Gin@noscale}}
+ {\ifAM@pdfpages@options\else
+ \ifAM@scale\else
+ \@temptokena\expandafter{\the\@temptokena,#1}%
+ \fi
+ \fi}{}%
+ \expandafter\AM@split@optionsi
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@split@optionsii}{}
+\def\AM@split@optionsii#1=#2\END{%
+ \edef\AM@temp{\AM@trim@space{#1}}%
+ \ifthenelse{\equal{page}{\AM@temp}\or
+ \equal{pages}{\AM@temp}\or
+ \equal{nup}{\AM@temp}\or
+ \equal{deltax}{\AM@temp}\or
+ \equal{deltay}{\AM@temp}\or
+ \equal{delta}{\AM@temp}\or
+ \equal{offset}{\AM@temp}\or
+ \equal{frame}{\AM@temp}\or
+ \equal{openright}{\AM@temp}\or
+ \equal{pagecommand}{\AM@temp}\or
+ \equal{landscape}{\AM@temp}\or
+ \equal{turn}{\AM@temp}\or
+ \equal{column}{\AM@temp}\or
+ \equal{columnstrict}{\AM@temp}\or
+ \equal{noautoscale}{\AM@temp}\or
+ \equal{thread}{\AM@temp}\or
+ \equal{threadname}{\AM@temp}\or
+ \equal{link}{\AM@temp}\or
+ \equal{linkfit}{\AM@temp}\or
+ \equal{linkname}{\AM@temp}\or
+ \equal{linktodoc}{\AM@temp}\or
+ \equal{linktodocfit}{\AM@temp}\or
+ \equal{linkfilename}{\AM@temp}\or
+ \equal{survey}{\AM@temp}\or
+ \equal{survey-nolink}{\AM@temp}\or
+ \equal{output}{\AM@temp}\or
+ \equal{xr-prefix}{\AM@temp}\or
+ \equal{fitpaper}{\AM@temp}\or
+ \equal{addtotoc}{\AM@temp}\or
+ \equal{addtolist}{\AM@temp}\or
+ \equal{doublepages}{\AM@temp}\or
+ \equal{doublepagestwist}{\AM@temp}\or
+ \equal{doublepagestwistodd}{\AM@temp}\or
+ \equal{doublepagestwist*}{\AM@temp}\or
+ \equal{doublepagestwistodd*}{\AM@temp}\or
+ \equal{duplicatepages}{\AM@temp}\or
+ \equal{signature}{\AM@temp}\or
+ \equal{signature*}{\AM@temp}\or
+ \equal{booklet}{\AM@temp}\or
+ \equal{pagetemplate}{\AM@temp}\or
+ \equal{templatesize}{\AM@temp}\or
+ \equal{rotateoversize}{\AM@temp}\or
+ \equal{picturecommand}{\AM@temp}\or
+ \equal{picturecommand*}{\AM@temp}\or
+ \equal{newwindow}{\AM@temp}\or
+ \equal{reflect}{\AM@temp}\or
+ \equal{reflect*}{\AM@temp}\or
+ \equal{lastpage}{\AM@temp}}
+ {\AM@pdfpages@optionstrue}{}%
+ \ifthenelse{\equal{scale}{\AM@temp}}{%
+ \AM@scaletrue
+ \def\AM@ooo##1={##1}%
+ \setlength{\@tempdima}{\p@ * \AM@scale@factor * \real{\AM@ooo#2}}%
+ \edef\AM@scale@factor{\strip@pt\@tempdima}%
+ }{}%
+}
+% \end{macrocode}
+% \macro{\AM@trim@space}
+% \macro{\AM@trim@spacei}
+% \macro{\AM@trim@spaceii}
+% Removes leading and trailing spaces.
+% \begin{macrocode}
+\newcommand{\AM@trim@space}{}\newcommand{\AM@trim@spacei}{}
+\newcommand{\AM@trim@spaceii}{}
+\def\AM@trim@space#1{%
+ \expandafter\AM@trim@spacei\expandafter{\ifdim\z@=0pt#1}\fi}
+\def\AM@trim@spacei#1{\AM@trim@spaceii#1 \END}
+\def\AM@trim@spaceii#1 #2\END{#1}
+% \end{macrocode}
+% \macro{\AM@trim@leadingspace}
+% Removes leading space.
+% \begin{macrocode}
+\DeclareRobustCommand{\AM@trim@leadingspace}[1]{\ifdim\z@=0pt#1\fi}
+% \end{macrocode}
+% \macro{\AM@isphantom}
+% Checks, if current page is an empty (phantom) page.
+% \begin{macrocode}
+\newif\ifAM@phantompage
+\newcommand*{\AM@isphantom}{%
+ \expandafter\ifx\expandafter\\\AM@page\\%
+ \let\AM@page\AM@phantompage
+ \let\AM@ph\phantom
+ \AM@phantompagetrue
+ \else
+ \let\AM@ph\relax
+ \AM@phantompagefalse
+ \fi
+}
+% \end{macrocode}
+% \macro{\AM@hyper@begin@i}
+% \macro{\AM@hyper@begin@ii}
+% \macro{\AM@hyper@end}
+% Add hypertext operations (targets, links and threads) to
+% the inserted pages.
+% \begin{macrocode}
+\newcommand{\AM@hyper@begin@i}{%
+% \end{macrocode}
+% Page is a target for a link.
+% \begin{macrocode}
+ \ifAM@link \AM@dest@special\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@hyper@begin@ii}{%
+% \end{macrocode}
+% Survey linking to pages.\par
+% \begin{macrocode}
+ \ifAM@survey \ifAM@surveynolink\else
+ \AM@survey@special@begin
+ \fi\fi
+% \end{macrocode}
+% Page is linked to the original document.\par
+% \begin{macrocode}
+ \ifAM@linktodoc\AM@linktodoc@special@begin\fi
+% \end{macrocode}
+% Page is a bead in a thread.
+% \begin{macrocode}
+ \ifAM@thread\AM@thread@special@begin\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@hyper@end}{%
+ \ifAM@survey \ifAM@surveynolink\else
+ \AM@survey@special@end
+ \fi \fi
+ \ifAM@linktodoc\AM@linktodoc@special@end\fi
+ \ifAM@thread\AM@thread@special@end\fi
+}
+% \end{macrocode}
+% \macro{\AM@openright}
+% Insert an empty item at the beginning of |\AM@pagelist|.
+% \begin{macrocode}
+\newcommand{\AM@openright}{}
+\def\AM@openright{%
+ \edef\AM@pagelist{,\AM@pagelist}%
+ \edef\AM@doclist{\AM@phantomdoc,\AM@doclist}%
+}
+% \end{macrocode}
+% \macro{\AM@countpagelist}
+% \macro{\AM@countpagelisti}
+% Count items in |\AM@pagelist|. The number
+% of items is stored in |\@tempcnta|.
+% \begin{macrocode}
+\newcommand{\AM@countpagelist}{}
+\def\AM@countpagelist{%
+ \@tempcnta=\z@
+ \expandafter\AM@countpagelisti\AM@pagelist,\END,
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@countpagelisti}{}
+\def\AM@countpagelisti#1,{%
+ \ifx\END#1
+ \else
+ \advance\@tempcnta\@ne
+ \expandafter\AM@countpagelisti
+ \fi
+}
+% \end{macrocode}
+% \macro{\AM@filluppagelist}
+% The number of items in |\AM@pagelist| and
+% |\AM@doclist| should be a multiple of
+% $|\AM@xnup|\nobreak\times\nobreak|\AM@ynup|$.
+% If not, fill up the lists with empty items.
+% \begin{macrocode}
+\newcommand{\AM@filluppagelist}{}
+\def\AM@filluppagelist{%
+ \@tempcnta=\AM@xnup\relax
+ \@tempcntb=\AM@ynup\relax
+ \multiply\@tempcnta\@tempcntb
+ \edef\AM@nup{\the\@tempcnta}%
+ \AM@countpagelist
+ \@tempcntb=\@tempcnta
+ \divide\@tempcntb\AM@nup
+ \multiply\@tempcntb\AM@nup
+ \advance\@tempcnta-\@tempcntb
+ \ifnum\@tempcnta=\z@
+ \else
+ \advance\@tempcnta-\AM@nup
+ \multiply\@tempcnta\m@ne
+ \fi
+ \whiledo{\@tempcnta > \z@}{%
+ \let\saveAM@pagelist\AM@pagelist
+ \edef\AM@pagelist{\saveAM@pagelist,}%
+ \advance\@tempcnta\m@ne
+ \let\saveAM@doclist\AM@doclist
+ \edef\AM@doclist{\saveAM@doclist,\AM@phantomdoc}%
+ }%
+}
+% \end{macrocode}
+% \macro{\AM@prepare@signature}
+% Sort the pages in order to create signatures.
+% \begin{macrocode}
+\newcommand{\AM@prepare@signature}{}
+\def\AM@prepare@signature{%
+ \def\AM@newpagelist{}%
+ \def\AM@newdoclist{}%
+% \end{macrocode}
+% Calculate value of |\AM@signature| for option |booklet|.
+% \begin{macrocode}
+ \ifAM@booklet
+ \AM@countpagelist
+ \@tempcntb=\@tempcnta
+ \divide\@tempcnta by 4
+ \multiply\@tempcnta by 4
+ \advance\@tempcntb-\@tempcnta
+ \ifnum\@tempcntb=0\else \advance\@tempcnta by 4\fi
+ \edef\AM@signature{\the\@tempcnta}%
+ \fi
+% \end{macrocode}
+% Make |\AM@signature| a multiply of 4.
+% \begin{macrocode}
+ \@tempcnta=\AM@signature\relax
+ \divide\@tempcnta by 4
+ \multiply\@tempcnta by 4
+ \ifnum\@tempcnta=0\@tempcnta=4\fi
+ \edef\AM@signature{\the\@tempcnta}%
+% \end{macrocode}
+% Make |\AM@pagelist| and |\AM@doclist| contain a multiply
+% of |\AM@signature| items. (Similar to |\AM@filluppagelist|.)
+% \begin{macrocode}
+ \AM@countpagelist
+ \count@=\@tempcnta
+ \@tempcntb=\AM@signature\relax
+ \divide\count@\@tempcntb
+ \multiply\count@\@tempcntb
+ \advance\@tempcnta-\count@
+ \ifnum\@tempcnta=0 \@tempcntb=0
+ \else\advance\@tempcntb-\@tempcnta
+ \fi
+ \whiledo{\@tempcntb>\z@}{%
+ \edef\AM@pagelist{\AM@pagelist,}%
+ \edef\AM@doclist{\AM@doclist,\AM@phantomdoc}%
+ \advance\@tempcntb\m@ne
+ }%
+% \end{macrocode}
+% Now sort the pages.
+% \begin{macrocode}
+ \def\AM@sort{%
+ \def\AM@sigpagelist{}%
+ \def\AM@sigdoclist{}%
+ \AM@split@firstn{\AM@pagelist}{\AM@signature}%
+ \AM@split@firstn{\AM@doclist}{\AM@signature}%
+ \def\AM@first{%
+ \AM@getfirst{\AM@pagelist@firstn}%
+ \edef\AM@sigpagelist{\AM@sigpagelist,\the\toks@}%
+ \AM@getfirst{\AM@doclist@firstn}%
+ \edef\AM@sigdoclist{\AM@sigdoclist,\the\toks@}%
+ }%
+ \def\AM@last{%
+ \AM@getfirst{\AM@pagelist@lastn}%
+ \edef\AM@sigpagelist{\AM@sigpagelist,\the\toks@}%
+ \AM@getfirst{\AM@doclist@lastn}%
+ \edef\AM@sigdoclist{\AM@sigdoclist,\the\toks@}%
+ }%
+ \@tempcnta=\z@
+ \@tempcntb=\AM@signature\relax
+ \whiledo{\@tempcnta<\@tempcntb}{%
+ \ifAM@landscape
+ \ifAM@signaturestar
+ \AM@first\AM@last\AM@first\AM@last
+ \else
+ \AM@last\AM@first\AM@last\AM@first
+ \fi
+ \else
+ \ifAM@signaturestar
+ \AM@last\AM@first\AM@last\AM@first
+ \else
+ \AM@first\AM@last\AM@first\AM@last
+ \fi
+ \fi
+ \advance\@tempcnta by 4
+ }%
+ \edef\AM@newpagelist{\AM@newpagelist\AM@sigpagelist}%
+ \edef\AM@newdoclist{\AM@newdoclist\AM@sigdoclist}%
+ \ifx\AM@pagelist\@empty
+ \else\expandafter\AM@sort
+ \fi
+ }%
+ \AM@sort
+ \edef\AM@pagelist{\expandafter\@gobble\AM@newpagelist}%
+ \edef\AM@doclist{\expandafter\@gobble\AM@newdoclist}%
+% \end{macrocode}
+% \begin{macrocode}
+ \AM@pagesize@boogie
+ \ifdim\AM@pagewidth<\AM@pageheight
+ \def\AM@xnup{\@ne}\def\AM@ynup{\tw@}%
+ \else
+ \def\AM@xnup{\tw@}\def\AM@ynup{\@ne}%
+ \fi
+}
+% \end{macrocode}
+% \macro{\AM@setphantom}
+% \macro{\AM@setphantompage}
+% \macro{\AM@setphantomdoc}
+% The box measures of the phantom page are used to create
+% empty pages. |\AM@phantomdoc| is the name and
+% |\AM@phantompage| is the page number of the phantom page.
+% \begin{macrocode}
+\newcommand*{\AM@setphantom}{%
+ \@ifundefined{AM@pagetemplate}
+ {\expandafter\AM@setphantompage\AM@pagelist,\END,}
+ {\edef\AM@phantompage{\AM@pagetemplate}}%
+ \expandafter\AM@setphantomdoc\AM@doclist,\END
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@setphantompage}{}
+\def\AM@setphantompage#1,{%
+ \def\AM@gobble##1\END,{}%
+ \ifx\\#1\\%
+ \expandafter\AM@setphantompage
+ \else
+ \def\AM@phantompage{#1}%
+ \expandafter\AM@gobble
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@setphantomdoc}{}
+\def\AM@setphantomdoc#1,#2\END{\edef\AM@phantomdoc{#1}}
+% \end{macrocode}
+% \macro{\AM@addtotoc}
+% \macro{\AM@parse@toclist}
+% \macro{\AM@parse@toclisti}
+% \macro{\AM@rm@from@toclist}
+% \macro{\AM@rm@from@toclisti}
+% These macros add entries to the table of contents (toc).
+%
+% |\AM@parse@addtotoc| reads the next entries from the list
+% |\AM@toclist| and prepares some macros (|\AM@toc@page|,
+% |\AM@toc@section|, etc.), which are used by |\AM@addtotoc|.
+%
+% The list |\AM@toclist| is a comma separated list and must
+% contain a multiple of five entries, which there are:
+% \meta{page number}, \meta{section}, \meta{level},
+% \meta{heading} and \meta{label}.
+% \meta{section} is e.g., `chapter', `section', `subsection', etc.
+% and \meta{level} is a number, denoting depth of section e.g.,
+% chapter=0, section=1, etc.
+% \begin{macrocode}
+\newcommand{\AM@addtotoc@hook}{\relax}
+\newcommand{\AM@addtotoc}{}
+\def\AM@addtotoc{%
+ \begingroup
+ \def\@seccntformat##1{}\def\@makechapterhead##1{}%
+ \def\@endpart{}\def\partname{}%
+ \def\autodot{}% KOMA classes
+ \def\ch@pt@c{\the\AM@toc@title}% memoir classes
+ \let\AM@addcontentsline\addcontentsline
+ \def\addcontentsline##1##2##3{%
+ \AM@addcontentsline{##1}{##2}{##3}%
+ \def\thepart{}}%
+ \AM@addtotoc@hook
+ \edef\AM@temp{{\AM@toc@section}{\AM@toc@level}%
+ {\z@}{\z@}{\z@}{}[\the\AM@toc@title]{}}%
+ \edef\AM@tempi{\noexpand\csname @\AM@toc@section\noexpand\endcsname%
+ [\the\AM@toc@title]{}}%
+ \@ifundefined{@\AM@toc@section}
+ {\expandafter\@sect\AM@temp
+ \hskip\z@\par\vskip-\parskip\vskip-\baselineskip\hskip\z@}
+ {\AM@tempi}%
+ \xdef\@currentlabel{\@currentlabel}%
+ \label{\AM@toc@label}%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@parse@toclist}{}
+\def\AM@parse@toclist{%
+ \ifx\AM@toclist\empty \def\AM@toc@page{0}%
+ \else \expandafter\AM@parse@toclisti\AM@toclist\END
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newtoks\AM@toc@title
+\newcommand{\AM@parse@toclisti}{}
+\def\AM@parse@toclisti#1,#2,#3,#4,#5,#6\END{%
+ \def\AM@toc@page{\AM@trim@space{#1}}%
+ \def\AM@toc@section{\AM@trim@space{#2}}%
+ \def\AM@toc@level{\AM@trim@space{#3}}%
+ \AM@toc@title{\ignorespaces #4}%
+ \def\AM@toc@label{\AM@trim@space{#5}}%
+ \AM@checkinteger{\AM@toc@page}%
+ \ifAM@integer\else
+ \PackageError{pdfpages}
+ {Missing number.\MessageBreak
+ Page number in option `addtotoc' is not a number}
+ {See the pdfpages manual for explanation.}%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@rm@from@toclist}{}
+\def\AM@rm@from@toclist{%
+ \expandafter\AM@rm@from@toclisti\AM@toclist\END
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@rm@from@toclisti}{}
+\def\AM@rm@from@toclisti#1,#2,#3,#4,#5,#6\END{%
+ \def\AM@toclist{#6}%
+}
+% \end{macrocode}
+% \macro{\AM@addtolist}
+% \macro{\AM@parse@loflist}
+% \macro{\AM@parse@loflisti}
+% \macro{\AM@rm@from@loflist}
+% \macro{\AM@rm@from@loflisti}
+% These macros add entries to the list of figures (lof),
+% the list of tables (lot) or any other list.
+%
+% |\AM@loflist| is a comma separated list similar to
+% |\AM@toclist|, which must contain the entries:
+% \meta{page number}, \meta{figure}, \meta{heading} and
+% \meta{label}.
+% \begin{macrocode}
+\newcommand{\AM@addtolist@hook}{\relax}
+\newcommand{\AM@addtolist}{}
+\def\AM@addtolist{%
+ \def\@captype{\AM@lof@list}%
+ \long\def\@makecaption##1##2{}%
+ \def\@fs@capt##1##2{}% float.sty
+ \AM@addtolist@hook
+ \@ifundefined{hyper@@anchor}{%
+ \expandafter\caption\expandafter{\AM@lof@heading}%
+ }{%
+ \hyper@makecurrent{\@captype}%
+ \expandafter\caption\expandafter{\AM@lof@heading}%
+ \hyper@@anchor{\@currentHref}{\relax}%
+ \let\Hy@float@currentHref\@undefined
+ }%
+ \label{\AM@lof@label}%
+ \vskip-\baselineskip
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@parse@loflist}{}
+\def\AM@parse@loflist{%
+ \ifx\AM@loflist\empty \def\AM@lof@page{0}%
+ \else \expandafter\AM@parse@loflisti\AM@loflist\END
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@parse@loflisti}{}
+\def\AM@parse@loflisti#1,#2,#3,#4,#5\END{%
+ \def\AM@lof@page{\AM@trim@space{#1}}%
+ \def\AM@lof@list{\AM@trim@space{#2}}%
+ \def\AM@lof@heading{\ignorespaces #3}%
+ \def\AM@lof@label{\AM@trim@space{#4}}%
+ \AM@checkinteger{\AM@lof@page}%
+ \ifAM@integer\else
+ \PackageError{pdfpages}
+ {Missing number.\MessageBreak
+ Page number in option `addtolist' is not a number}
+ {See the pdfpages manual for explanation.}%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@rm@fromloflist}{}
+\def\AM@rm@from@loflist{%
+ \expandafter\AM@rm@from@loflisti\AM@loflist\END
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\AM@rm@from@loflisti}{}
+\def\AM@rm@from@loflisti#1,#2,#3,#4,#5\END{%
+ \def\AM@loflist{#5}%
+}
+% \end{macrocode}
+% \macro{\AM@toclof}
+% \begin{macrocode}
+\newcommand{\AM@toclof}{}
+\def\AM@toclof#1{%
+ \AM@parse@toclist
+ \whiledo{#1=\AM@toc@page}{%
+ \ifx\AM@toclist\empty
+ \else
+ \AM@addtotoc
+ \AM@rm@from@toclist
+ \def\AM@toc@page{0}%
+ \AM@parse@toclist
+ \fi
+ }%
+ \AM@parse@loflist
+ \whiledo{#1=\AM@lof@page}{%
+ \ifx\AM@loflist\empty
+ \else
+ \AM@addtolist
+ \AM@rm@from@loflist
+ \def\AM@lof@page{0}%
+ \AM@parse@loflist
+ \fi
+ }%
+}
+% \end{macrocode}
+% \macro{\AM@AddToSurvey}
+% Add page to survey.
+% \begin{macrocode}
+\ifAM@pkg@survey
+ \newcommand{\AddToSurvey}{%
+ \protected@write\@auxout{\let\AM@abs@page\relax}
+ {\string\newlabel{\AM@xrprefix pdfpages@page\the\c@AM@survey}%
+ {{}{\AM@abs@page}}}%
+ \stepcounter{AM@survey}%
+ }%
+ \let\r@TotalPages\undefined
+\else
+ \newcommand{\AddToSurvey}{}
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+\newcounter{AM@survey}
+% \end{macrocode}
+% |count1to.sty| saves the absolute page number in |\count1|.
+% \begin{macrocode}
+\def\AM@abs@page{\the\count1}
+% \end{macrocode}
+% \macro{\AM@pageref}
+% |\AM@pageref| expands to a page number (and nothing more).
+% \begin{macrocode}
+\newcommand{\AM@pageref}{}
+\newcommand{\AM@@pageref}{}
+\newcommand{\AM@secondarg}{}
+\def\AM@pageref#1{\expandafter\AM@@pageref\csname r@#1\endcsname}
+\def\AM@@pageref#1{\expandafter\AM@secondarg#1\@nil}
+\def\AM@secondarg#1#2#3\@nil{#2}
+% \end{macrocode}
+% Make |\AddToSurvey| work within TeXpower's |\stepwise|.
+% \begin{macrocode}
+\def\AM@TeXpower@hook{%
+ \ifAM@pkg@survey
+ \@ifpackageloaded{texpower}{%
+ \releasecounter{AM@survey}%
+ \let\AM@SetLabel\relax
+ \g@addto@macro\do@insert@firstanchor@TP{%
+ \AM@SetLabel\AM@SetTarget}%
+ \g@addto@macro\dont@insert@firstanchor@TP{%
+ \AM@SetLabel\AM@SetTarget}%
+ \let\AM@setanchor\relax
+ \def\AM@SetTarget{%
+ \begingroup
+ \advance\count1\m@ne
+ \AM@anchor@special
+ \endgroup
+ }%
+ \let\OrigAddToSurvey\AddToSurvey
+ \def\AddToSurvey{%
+ \ifthenelse{\boolean{instepwise@TP}}
+ {\ifthenelse{\boolean{firstactivation}}{\AM@AddLabel}{}}
+ {\AM@AddLabel}%
+ }%
+ \def\AM@AddLabel{\global\let\AM@SetLabel\OrigAddToSurvey
+ \AtShipout{\AM@KillLabel}}%
+ \def\AM@KillLabel{\global\let\AM@SetLabel\relax}%
+ }{}%
+ \fi
+}
+\AtBeginDocument{\AM@TeXpower@hook}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@CheckValue#1#2{%
+ \ifx\\#2\\\PackageError{pdfpages}
+ {Option `#1' must have a non-empty value}%
+ \fi
+}
+% \end{macrocode}
+% \subsection{Options of \texttt{\protect\bslash includepdf}}
+% \begin{macrocode}
+\define@key{pdfpages}{page}{\PackageWarningNoLine{pdfpages}{%
+ Option `page' is unknow to \string\includepdf.\MessageBreak
+ Did you mean `pages'? (Note the `s'!)\MessageBreak
+ OK, I'll proceed as if it were `pages'}%
+ \AM@CheckValue{pages}{#1}%
+ \def\AM@pagestemp{#1}}
+\define@key{pdfpages}{pages}{\AM@CheckValue{pages}{#1}%
+ \def\AM@pagestemp{#1}}
+\define@key{pdfpages}{nup}{\AM@parse@nup#1x\END}
+\define@key{pdfpages}{deltax}{\AM@parse@deltax#1 \\}
+\define@key{pdfpages}{deltay}{\AM@parse@deltay#1 \\}
+\define@key{pdfpages}{delta}{\AM@parse@delta#1 \\}
+\define@key{pdfpages}{offset}{\AM@parse@offset#1 \\}
+\define@key{pdfpages}{frame}[true]{\setboolean{AM@frame}{#1}}
+\define@key{pdfpages}{openright}[true]{\setboolean{AM@openright}{#1}}
+\define@key{pdfpages}{pagecommand}{\def\AM@pagecommand{#1}}
+\define@key{pdfpages}{landscape}[true]{\setboolean{AM@landscape}{#1}}
+\define@key{pdfpages}{turn}[true]{\setboolean{AM@turn}{#1}}
+\define@key{pdfpages}{column}[true]{\setboolean{AM@column}{#1}}
+\define@key{pdfpages}{columnstrict}[true]%
+ {\setboolean{AM@columnstrict}{#1}}
+\define@key{pdfpages}{noautoscale}[true]%
+ {\setboolean{AM@noautoscale}{#1}}
+\define@key{pdfpages}{thread}[true]{\setboolean{AM@thread}{#1}}
+\define@key{pdfpages}{threadname}{\def\AM@threadname{#1}}
+\define@key{pdfpages}{link}[true]{\setboolean{AM@link}{#1}}
+%\define@key{pdfpages}{linkfit}{\def\AM@linkfit{#1}}
+\define@key{pdfpages}{linkfit}{\AM@convert@dest{#1}}
+\define@key{pdfpages}{linkname}{\def\AM@linkname@option{#1}}
+\define@key{pdfpages}{linktodoc}[true]{\setboolean{AM@linktodoc}{#1}}
+\define@key{pdfpages}{linktodocfit}{\def\AM@linktodocfit{#1}}
+\define@key{pdfpages}{linkfilename}{\pdfstringdef\AM@linkfilename{#1}%
+ \AM@linkfilenametrue}
+\define@key{pdfpages}{survey}[true]{%
+ \ifAM@pkg@survey\setboolean{AM@survey}{#1}%
+ \else\AM@outputfalse\fi}
+\define@key{pdfpages}{survey-nolink}[true]{%
+ \ifAM@pkg@survey\setboolean{AM@surveynolink}{#1}%
+ \setboolean{AM@survey}{#1}
+ \else\AM@outputfalse\fi}
+\define@key{pdfpages}{xr-prefix}{\def\AM@xrprefix{#1}}
+\define@key{pdfpages}{fitpaper}[true]{\setboolean{AM@fitpaper}{#1}}
+\define@key{pdfpages}{addtotoc}{\def\AM@toclist{#1,}}
+\define@key{pdfpages}{addtolist}{\def\AM@loflist{#1,}}
+\define@key{pdfpages}{doublepages}[true]%
+ {\setboolean{AM@doublepages}{#1}}
+\define@key{pdfpages}{doublepagestwist}[true]%
+ {\setboolean{AM@doublepages}{#1}%
+ \setboolean{AM@doublepagestwist}{#1}%
+ \AM@doublepagestmptrue\AM@doublepagestmpitrue}
+\define@key{pdfpages}{doublepagestwistodd}[true]%
+ {\setboolean{AM@doublepages}{#1}%
+ \setboolean{AM@doublepagestwist}{#1}%
+ \AM@doublepagestmpfalse\AM@doublepagestmpitrue}
+\define@key{pdfpages}{doublepagestwist*}[true]%
+ {\setboolean{AM@doublepages}{#1}%
+ \setboolean{AM@doublepagestwist}{#1}%
+ \AM@doublepagestmptrue\AM@doublepagestmpitrue
+ \AM@doublepagestwistxtrue}
+\define@key{pdfpages}{doublepagestwistodd*}[true]%
+ {\setboolean{AM@doublepages}{#1}%
+ \setboolean{AM@doublepagestwist}{#1}%
+ \AM@doublepagestmpfalse\AM@doublepagestmpitrue
+ \AM@doublepagestwistxtrue}
+\define@key{pdfpages}{duplicatepages}[2]%
+ {\def\AM@nduplicatepages{#1}%
+ \AM@duplicatepagestrue}
+\define@key{pdfpages}{signature}{\def\AM@signature{#1}}
+\define@key{pdfpages}{signature*}{\def\AM@signature{#1}%
+ \AM@signaturestartrue}
+\define@key{pdfpages}{booklet}[true]{\setboolean{AM@booklet}{#1}%
+ \def\AM@signature{x}}
+\define@key{pdfpages}{pagetemplate}{\AM@CheckValue{pagetemplate}{#1}%
+ \def\AM@pagetemplate{#1}}
+\define@key{pdfpages}{templatesize}{\AM@parse@templatesize#1\END}
+\define@key{pdfpages}{rotateoversize}[true]%
+ {\setboolean{AM@rotateoversize}{#1}}
+\define@key{pdfpages}{picturecommand}{\def\AM@picturecommand{#1}}
+\define@key{pdfpages}{picturecommand*}{\def\AM@picturecommandstar{#1}}
+\define@key{pdfpages}{newwindow}[true]{\setboolean{AM@newwindow}{#1}}
+\define@key{pdfpages}{reflect*}[true]{\setboolean{AM@reflect}{#1}}
+\define@key{pdfpages}{reflect}[true]{\setboolean{AM@reflectall}{#1}}
+\define@key{pdfpages}{lastpage}{\def\AM@pagecount{#1}}
+% \end{macrocode}
+% \macro{\AM@parse@nup}
+% Parsing \texttt{nup} item.
+% \begin{macrocode}
+\newcommand{\AM@parse@nup}{}
+\def\AM@parse@nup#1x#2\END{%
+ \ifx\\#2\\%
+ \def\AM@shortnupsyntax{}%
+ \def\AM@xnup{\@ne}%
+ \def\AM@ynup{\@ne}%
+ \ifnum#1=\tw@
+ \def\AM@xnup{\tw@}%
+ \def\AM@ynup{\@ne}%
+ \fi
+ \ifnum#1=4
+ \def\AM@xnup{\tw@}%
+ \def\AM@ynup{\tw@}%
+ \fi
+ \else
+ \def\AM@xnup{#1}%
+ \AM@parse@nupi#2%
+ \fi
+}
+\def\AM@parse@nupi#1x{\def\AM@ynup{#1}}
+% \end{macrocode}
+% \macro{\AM@parse@templatesize}
+% Parsing \texttt{templatesize} item.
+% \begin{macrocode}
+\newcommand{\AM@parse@templatesize}{}
+\def\AM@parse@templatesize#1#2\END{%
+ \setbox\AM@templatesizebox=\hbox{\rule{#1}{#2}}%
+ \AM@templatesizetrue
+}
+\newbox\AM@templatesizebox
+\newif\ifAM@templatesize\AM@templatesizefalse
+% \end{macrocode}
+% \macro{\AM@parse@deltax}
+% \macro{\AM@parse@deltay}
+% \macro{\AM@parse@offset}
+% Parsing arguments. These lines are derived
+% from \texttt{graphicx.sty}.
+% \begin{macrocode}
+\def\AM@parse@deltax#1 #2\\{\AMGin@defaultbp\AM@deltax{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@parse@deltay#1 #2\\{\AMGin@defaultbp\AM@deltay{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@parse@delta#1 #2 #3\\{%
+ \AMGin@defaultbp\AM@deltax{#1}%
+ \AMGin@defaultbp\AM@deltay{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@parse@offset#1 #2 #3\\{%
+ \AMGin@defaultbp\AM@xoffset{#1}%
+ \AMGin@defaultbp\AM@yoffset{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AMGin@defaultbp#1#2{%
+ \afterassignment\AMGin@def@bp\dimen@#2bp\relax{#1}{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AMGin@def@bp#1\relax#2#3{%
+ \if!#1!%
+ \def#2{#3bp}%
+ \else
+ \dimen@.99626\dimen@
+ \edef#2{\strip@pt\dimen@ bp}%
+ \fi
+}
+% \end{macrocode}
+% Load patch file, if one exists.
+% \begin{macrocode}
+\InputIfFileExists{pdfpages.fix}{%
+ \PackageInfo{pdfpages}{Loading patch file `pdfpages.fix'}}{}
+% \end{macrocode}
+%
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \subsection{Driver files}
+%
+% \subsubsection{\pdfTeX\ and \luaTeX\ drivers}
+%
+% The driver file for \pdfTeX\ and \luaTeX\ are mostly the same.
+% So far they only differ in checking of the version numbers of
+% the \TeX-engines and graphicx driver files.
+%
+% Check \pdfTeX\ version.
+% \begin{macrocode}
+%<*pppdftexdef>
+\ifnum\pdftexversion<100
+ \PackageError{pdfpages}
+ {Package pdfpages requires at least\MessageBreak
+ pdfTeX version 1.00}
+ {Update your TeX distribution.}%
+ \let\AM@endinput\relax
+ \expandafter\endinput
+\fi
+%</pppdftexdef>
+% \end{macrocode}
+% Starting with LuaTeX 0.85 quite a few primitives have been renamed
+% and/or removed. To cope with these changes we have to provide both
+% primitive names depending on which version we are running.
+% \begin{macrocode}
+%<*(pppdftexdef,ppluatexdef)>
+%<*ppluatexdef>
+\ifnum\luatexversion<85
+%</ppluatexdef>
+ \let\AM@outputmode\pdfoutput
+ \let\AM@saveimageresource\pdfximage
+ \let\AM@lastsavedimageresourcepages\pdflastximagepages
+ \let\AM@luatexpagewidth\pdfpagewidth
+ \let\AM@luatexpageheight\pdfpageheight
+ \let\AM@annotation\pdfannot
+ \let\AM@thread\pdfthread
+ \let\AM@destination\pdfdest
+%<*ppluatexdef>
+\else
+ \let\AM@outputmode\outputmode
+ \let\AM@saveimageresource\saveimageresource
+ \let\AM@lastsavedimageresourcepages\lastsavedimageresourcepages
+ \let\AM@luatexpagewidth\pagewidth
+ \let\AM@luatexpageheight\pageheight
+ \protected\def\AM@annotation {\pdfextension annot }%
+ \protected\def\AM@thread {\pdfextension thread }%
+ \protected\def\AM@destination {\pdfextension dest }%
+\fi
+%</ppluatexdef>
+%</(pppdftexdef,ppluatexdef)>
+% \end{macrocode}
+% Insert dummy driver |ppnull.def| if we are not running in PDF mode.
+% \begin{macrocode}
+%<*pppdftexdef>
+\ifcase\pdfoutput
+ \input{ppnull.def}
+ \expandafter\endinput
+\fi
+%</pppdftexdef>
+%<*ppluatexdef>
+\ifcase\AM@outputmode
+ \input{ppnull.def}
+ \expandafter\endinput
+\fi
+
+%</ppluatexdef>
+% \end{macrocode}
+% Check if the graphics package was loaded with an
+% incompatible driver option (e.g. dvips).
+% \begin{macrocode}
+%<*pppdftexdef>
+\begingroup
+\@ifundefined{ver@pdftex.def}{%
+ \PackageError{pdfpages}
+ {The graphics package was loaded with driver\MessageBreak
+ `\Gin@driver', which cannot be used with pdfTeX}
+ {Check the driver option of the graphics package.}
+ \global\let\AM@endinput\relax
+ \aftergroup\endinput}{}
+\endgroup
+% \end{macrocode}
+% Check for \texttt{pdftex.def} version \texttt{2000/05/12 v0.02u}
+% or higher:
+% \begin{list}{$\ast$}{\versionlist}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item support for multipage \PDF\ files, option `page' added (HO).
+% \end{list}
+% \begin{macrocode}
+\AM@ifdriverlater{pdftex}{2000/05/12}{}{%
+ \PackageError{pdfpages}
+ {Your version of `pdftex.def' is too old.\MessageBreak
+ There is no multipage support\MessageBreak
+ in `pdftex.def' < 0.02u}
+ {Please, update your `pdftex.def'!}}
+% \end{macrocode}
+% Check for \texttt{pdftex.def} version \texttt{2000/09/14 v0.03d}
+% or higher:
+% \begin{list}{$\ast$}{\versionlist}
+% \makeatletter\@beginparpenalty=10000\makeatother
+% \item Fixes for `viewport' and `trim' (HO).
+% \item Clip support added for viewport and trim (HO).
+% \end{list}
+% \begin{macrocode}
+\AM@ifdriverlater{pdftex}{2000/09/14}{}{%
+ \PackageWarningNoLine{pdfpages}{%
+ Your version of `pdftex.def' is too old.\MessageBreak
+ There might be problems with\MessageBreak
+ the `trim' and `clip' options.\MessageBreak
+ Please, update your `pdftex.def'}}
+%</pppdftexdef>
+% \end{macrocode}
+%
+% Get last page number.
+%
+% \noindent
+% Note: Do not use |\pdfximage| directly. This compromises packages which
+% manipulate the input path of graphicx.sty.
+%
+% Unfortunately, |\pdflastximagepages| is not updated if |\includegraphics|
+% is used repeatedly on the same file. Heiko is aware of this and will provide
+% a solution in pdftex.def. Until then we will use the original graphicx's filename
+% from |\Gread@@pdftex|.
+%
+% \def\AM@getpagecount{%
+% \setbox\@tempboxa=\hbox{\includegraphics{\AM@currentdocname}}%
+% \edef\AM@pagecount{\the\AM@lastsavedimageresourcepages}%
+% }
+%
+% \begin{macrocode}
+%<*(pppdftexdef,ppluatexdef)>
+\let\AM@Gread@@pdftex\Gread@@pdftex
+\renewcommand*{\Gread@@pdftex}[1]{%
+ \xdef\AM@currentdocname@fix{#1}%
+ \AM@Gread@@pdftex{#1}%
+}
+\def\AM@getpagecount{%
+ \setbox\@tempboxa=\hbox{\includegraphics{\AM@currentdocname}}%
+ \AM@saveimageresource{\AM@currentdocname@fix}%
+ \edef\AM@pagecount{\the\AM@lastsavedimageresourcepages}%
+}
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\paperwidth
+ \AM@pageheight=\paperheight
+}
+\def\AM@setpagedimen{%
+ \AM@luatexpagewidth\AM@pagewidth
+ \AM@luatexpageheight\AM@pageheight
+}
+\let\AM@pagesize@boogie\relax
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\let\AM@fitpaper@special\relax
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \AM@findfile@i{#1}{pdf}%
+ \AM@findfile@ii{#1}%
+}
+\AtBeginDocument{%
+\@ifpackageloaded{grffile}{%
+ \let\AM@IfFileExists\grffile@IfFileExists}{%
+ \let\AM@IfFileExists\IfFileExists}%
+}
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\def\AM@setRotate{\PLS@Rotate{90}}
+\def\AM@resetRotate{\PLS@Rotate{0}}
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\def\AM@linktodoc@special@begin{%
+ \AM@annotation width \wd\@tempboxa
+ height \ht\@tempboxa
+ depth \dp\@tempboxa
+ {/Subtype /Link /Border [0 0 0]
+ /A << /S /GoToR
+ /F (\AM@linkfilename)
+ /D [\AM@linktodoc@page@m@ne \AM@linktodocfit]
+ \ifAM@newwindow/NewWindow true\fi >>}%
+}
+\let\AM@linktodoc@special@end\relax
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\def\AM@survey@special@begin{%
+ \AM@annotation width \wd\@tempboxa
+ height \ht\@tempboxa
+ depth \dp\@tempboxa
+ {/Subtype /Link /Border [0 0 0]
+ /A << /S /GoTo
+ /D (pdfpages.\AM@linktodoc@page@m@ne) >>}%
+}
+\let\AM@survey@special@end\relax
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\def\AM@thread@special@begin{%
+ \AM@thread width \wd\@tempboxa
+ height \ht\@tempboxa
+ depth \dp\@tempboxa
+ attr {/I <<\threadinfodict>>}%
+ name {\AM@threadname}%
+}
+\let\AM@thread@special@end\relax
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\def\AM@view{fit}
+\def\AM@dest@special{\AM@destination name {\AM@linkname.\AM@page} \AM@view}
+\def\AM@anchor@special{\AM@destination name {pdfpages.\the\count1} fit}
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \pdfTeX\ does not support positional parameters to |fith| etc.
+% \begin{macrocode}
+\def\AM@convert@dest#1{%
+ \expandafter\AM@convert@dest@i\ifdim\z@=0pt#1 \END\fi}
+\def\AM@convert@dest@i#1 #2\END{%
+ \begingroup
+ \def\tag{#1}%
+ \def\x{FitH}%
+ \ifx\x\tag
+ \gdef\AM@view{fith}%
+ \else
+ \def\x{FitBH}%
+ \ifx\x\tag
+ \gdef\AM@view{fitbh}%
+ \else
+ \def\x{FitV}%
+ \ifx\x\tag
+ \gdef\AM@view{fitv}%
+ \else
+ \def\x{FitBV}%
+ \ifx\x\tag
+ \gdef\AM@view{fitbv}%
+ \else
+ \def\x{FitR}%
+ \ifx\x\tag
+ \gdef\AM@view{fitr}%
+ \PackageWarningNoLine{pdfpages}{%
+ `linkfit=FitR' is not supported,
+ I will try `linkfit=Region'.}%
+ \def\tag{region}%
+ \else
+ \def\x{FitB}%
+ \ifx\x\tag
+ \gdef\AM@view{fitb}%
+ \else
+ \def\x{XZY}%
+ \ifx\x\tag
+ \gdef\AM@view{xyz zoom #2}%
+ \else
+ \def\x{Region}%
+ \ifx\x\tag
+ \gdef\AM@view{fitr
+ width\the\wd\@tempboxa\space
+ height0pt depth\AM@region@depth}%
+ \else
+ \gdef\AM@view{fit}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\AM@region@calc{%
+ \setlength{\@tempdima}{\ht\@tempboxa + \dp\@tempboxa}%
+ \edef\AM@region@depth{\the\@tempdima}%
+}
+% \end{macrocode}
+% Do not disable |\includegraphics|.
+% \begin{macrocode}
+\let\AM@disable@includegraphics\relax
+% \end{macrocode}
+%
+% \iffalse
+%</(pppdftexdef,ppluatexdef)>
+%
+%<*ppvtexdef>
+% \fi
+%
+% \subsubsection{\VTeX\ driver}
+%
+% Check if the graphics package was loaded with an
+% incompatible driver option (e.g. dvips).
+% \begin{macrocode}
+\begingroup
+\@ifundefined{ver@vtex.def}{%
+ \PackageError{pdfpages}
+ {The graphics package was loaded with driver\MessageBreak
+ `\Gin@driver', which cannot be used with VTeX}
+ {Check the driver option of the graphics package.}%
+ \global\let\AM@endinput\relax
+ \aftergroup\endinput}{}
+\endgroup
+% \end{macrocode}
+% Check \VTeX\ version.
+% \begin{macrocode}
+\ifnum\VTeXversion<822
+ \PackageError{pdfpages}
+ {Package pdfpages requires at least\MessageBreak
+ VTeX version 8.22}
+ {Update your VTeX distribution.}%
+ \let\AM@endinput\relax
+\fi
+% \end{macrocode}
+% Check |vtex.def| version.
+% \begin{macrocode}
+\AM@ifdriverlater{vtex}{2003/06/16}{}{%
+ \PackageError{pdfpages}{%
+ Your version of `vtex.def' is too old}
+ {Please, update your `vtex.def'!}%
+ \let\AM@endinput\relax
+ \expandafter\endinput
+}
+% \end{macrocode}
+% Get last page number.
+% \begin{macrocode}
+\def\AM@getpagecount{%
+ \getpagecount\count@ \AM@currentdocname\relax
+ \edef\AM@pagecount{\the\count@}%
+}
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\mediawidth
+ \AM@pageheight=\mediaheight
+}
+\def\AM@setpagedimen{%
+ \mediawidth\AM@pagewidth
+ \mediaheight\AM@pageheight
+}
+\let\AM@pagesize@boogie\relax
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\def\AM@setRotate{\special{pS:
+ [{ThisPage}\string<\string</Rotate 90\string>\string>%]
+ /PUT pdfmark}%
+}
+\def\AM@resetRotate{}
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\def\AM@fitpaper@special{%
+ \immediate\xspecial{option updatemediasizes="on"}}
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \AM@findfile@i{#1}{pdf}%
+ \ifx\AM@currentdocname\relax
+ \AM@findfile@i{#1}{ps}%
+ \fi
+ \AM@findfile@ii{#1}%
+}
+\let\AM@IfFileExists\IfFileExists
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\def\AM@linktodoc@special@begin{%
+ \special{!aref <\ifAM@newwindow n\fi
+ f=\AM@linkfilename>!\AM@linktodoc@page;
+ a=</Border [0 0 0]>}%
+}
+\def\AM@linktodoc@special@end{%
+ \special{!endaref}%
+}
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\def\AM@survey@special@begin{%
+ \special{!aref pdfpages.\AM@linktodoc@page@m@ne;
+ a=</Border [0 0 0]>}%
+}
+\def\AM@survey@special@end{%
+ \special{!endaref}%
+}
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\def\AM@thread@special@begin{%
+ \special{!thread <\threadinfodict> \AM@threadname}%
+}
+\def\AM@thread@special@end{\special{!endthread}}
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\def\AM@dest@special{\special{!aname \AM@linkname.\AM@page}}
+\def\AM@anchor@special{\special{!aname pdfpages.\the\count1}}
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \begin{macrocode}
+\def\AM@convert@dest#1{}
+\def\AM@region@calc{}
+% \end{macrocode}
+% Do not disable |\includegraphics|.
+% \begin{macrocode}
+\let\AM@disable@includegraphics\relax
+% \end{macrocode}
+%
+% \iffalse
+%</ppvtexdef>
+%
+%<*ppxetexdef>
+% \fi
+%
+% \subsubsection{\XeTeX\ driver}
+%
+% Check if the graphics package was loaded with an
+% incompatible driver option (e.g. dvips).
+% \begin{macrocode}
+\begingroup
+\@ifundefined{ver@xetex.def}{%
+ \PackageError{pdfpages}
+ {The graphics package was loaded with driver\MessageBreak
+ `\Gin@driver', which cannot be used with XeTeX}
+ {Check the driver option of the graphics package.}
+ \global\let\AM@endinput\relax
+ \aftergroup\endinput}{}
+\endgroup
+% \end{macrocode}
+% Packages like ngerman.sty make " with catcode 11 active. So let's
+% use " with catcode 12 to delimit arguments.
+% \begin{macrocode}
+{\catcode`\"=12
+ \gdef\AM@XeTeXquote{"}%
+}
+% \end{macrocode}
+% Get last page number. |\XeTeXpdfpagecount| is only defined
+% for |pdf| files. For all other file types |\AM@pagecount|
+% must be set to |1| explicitely.
+%
+% \noindent
+% Note: |import.sty| imports tex-files from sub-directories, allowing
+% these tex-files to use e.g. |\includegraphics|. However, this does not
+% work out of the box for pdfpages with XeTeX-driver (as it does with
+% pdftex-driver). We have to use |\import@path| of |import.sty|.
+% \begin{macrocode}
+\def\AM@getpagecount{%
+ \expandafter\filename@parse\expandafter{\AM@currentdocname}%
+ \edef\type@ext{%
+ \noexpand\lowercase{%
+ \noexpand\def\noexpand\type@ext{.\filename@ext}}}%
+ \type@ext
+ \ifx\type@ext\AM@pdf@ext
+ \ifdefined\import@path
+ \let\AM@import@path\import@path
+ \else
+ \let\AM@import@path\@empty
+ \fi
+ \setbox\@tempboxa=\hbox{\includegraphics{\AM@currentdocname}}%
+ \edef\AM@pagecount{\the\XeTeXpdfpagecount\AM@XeTeXquote
+ \AM@import@path\AM@currentdocname\AM@XeTeXquote\relax}%
+ \else
+ \def\AM@pagecount{1}%
+ \fi
+}
+\def\AM@pdf@ext{.pdf}
+% \end{macrocode}
+% |\XeTeXversion| has changed from time to time: 0.997, 0.997-dev,
+% 0.998.1
+% \begin{macrocode}
+\begingroup
+\def\gobble@nil#1\@nil{}
+\ifnum\XeTeXversion=0
+ \afterassignment\gobble@nil
+ \count@\expandafter\@gobble\XeTeXrevision.\@nil
+ \ifnum\count@<997
+ \PackageError{pdfpages}
+ {Package pdfpages requires at least XeTeX-0.997}
+ {Update your TeX distribution!}
+ \global\let\AM@endinput\relax
+ \aftergroup\endinput
+ \fi
+\fi
+\endgroup
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\paperwidth
+ \AM@pageheight=\paperheight
+}
+\def\AM@setpagedimen{%
+ \pdfpagewidth\AM@pagewidth
+ \pdfpageheight\AM@pageheight
+}
+\def\AM@pagesize@boogie{%
+ \ifdim\AM@pagewidth=\z@
+ \ifdim\AM@pageheight=\z@
+ \let\AM@pagewidth\paperwidth
+ \let\AM@pageheight\paperheight
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\let\AM@fitpaper@special\relax
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \AM@findfile@i{#1}{pdf}%
+ \AM@findfile@ii{#1}%
+}
+\long\def\AM@IfFileExists#1#2#3{%
+ \openin\@inputcheck=\AM@XeTeXquote#1\AM@XeTeXquote\relax
+ \ifeof\@inputcheck
+ \ifx\input@path\@undefined
+ \def\reserved@a{#3}%
+ \else
+ \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}%
+ \fi
+ \else
+ \closein\@inputcheck
+ \edef\@filef@und{#1 }%
+ \def\reserved@a{#2}%
+ \fi
+ \reserved@a}
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\def\AM@setRotate{\PLS@Rotate{90}}
+\def\AM@resetRotate{\PLS@Rotate{0}}
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\def\AM@linktodoc@special@begin{%
+ \special{pdf: annot
+ width \the\wd\@tempboxa\space
+ height \the\ht\@tempboxa\space
+ depth \the\dp\@tempboxa\space
+ << /Type /Annot
+ /Subtype /Link /Border [0 0 0]
+ /A << /S /GoToR
+ /F (\AM@linkfilename)
+ /D [\AM@linktodoc@page@m@ne \AM@linktodocfit]
+ \ifAM@newwindow/NewWindow true\fi >>
+ >>}%
+}
+\let\AM@linktodoc@special@end\relax
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\def\AM@survey@special@begin{%
+ \special{pdf: annot
+ width \the\wd\@tempboxa\space
+ height \the\ht\@tempboxa\space
+ depth \the\dp\@tempboxa\space
+ << /Type /Annot
+ /Subtype /Link /Border [0 0 0]
+ /A << /S /GoTo
+ /D (pdfpages.\AM@linktodoc@page@m@ne) >>
+ >>}%
+}
+\let\AM@survey@special@end\relax
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\def\AM@thread@special@begin{%
+ \special{pdf: thread @\AM@threadname\space
+ width \the\wd\@tempboxa\space
+ height \the\ht\@tempboxa\space
+ depth \the\dp\@tempboxa\space
+ <<\threadinfodict>>
+ }%
+}
+\let\AM@thread@special@end\relax
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\def\AM@view{/Fit}
+\def\AM@dest@special{%
+ \special{pdf: dest (\AM@linkname.\AM@page) [ @thispage \AM@view ]}}
+\def\AM@anchor@special{%
+ \special{pdf: dest (pdfpages.\the\count1) [ @thispage /Fit ]}}
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \begin{macrocode}
+\def\AM@convert@dest#1{%
+ \expandafter\AM@convert@dest@i\ifdim\z@=0pt#1 \END\fi}
+\def\AM@convert@dest@i#1 #2\END{%
+ \begingroup
+ \def\tag{#1}%
+ \def\x{FitH}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitH @ypos}%
+ \else
+ \def\x{FitBH}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitBH @ypos}%
+ \else
+ \def\x{FitV}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitV @xpos}%
+ \else
+ \def\x{FitBV}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitBV @xpos}%
+ \else
+ \def\x{fitr}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \PackageWarningNoLine{pdfpages}{%
+ `linkfit=FitR' is not supported.}%
+ \else
+ \def\x{FitB}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitB}%
+ \else
+ \def\x{XYZ}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \else
+ \def\x{Region}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \PackageWarningNoLine{pdfpages}{%
+ `linkfit=Region' is not supported by XeTeX.}%
+ \else
+ \gdef\AM@view{/Fit}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\AM@region@calc{}
+% \end{macrocode}
+% Do not disable |\includegraphics|.
+% \begin{macrocode}
+\let\AM@disable@includegraphics\relax
+% \end{macrocode}
+%
+% \iffalse
+%</ppxetexdef>
+%
+%<*ppdvipsdef>
+% \fi
+%
+% \subsubsection{Dvips driver}
+%
+% \begin{macrocode}
+\def\AM@notsupported#1{%
+ \PackageWarning{pdfpages}{#1 not supported by driver dvips}}
+% \end{macrocode}
+% Get last page number.
+% \begin{macrocode}
+\def\AM@getpagecount{%
+ \ifx\AM@pagecount\AM@undefined
+ \AM@notsupported{Page selections}
+ \def\AM@pagecount{1}%
+ \gdef\AM@getpagecount{%
+ \def\AM@pagecount{1}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\paperwidth
+ \AM@pageheight=\paperheight
+}
+\def\AM@setpagedimen{%
+ \paperwidth\AM@pagewidth
+ \paperheight\AM@pageheight
+}
+\let\AM@pagesize@boogie\relax
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\def\AM@setRotate{\AM@notsupported{Page rotations}}
+\def\AM@resetRotate{}
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\def\AM@fitpaper@special{\AM@notsupported{Option fitpaper}}
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \AM@findfile@i{#1}{eps}%
+ \ifx\AM@currentdocname\relax
+ \AM@findfile@i{#1}{ps}%
+ \fi
+ \AM@findfile@ii{#1}%
+}
+\let\AM@IfFileExists\IfFileExists
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\def\AM@linktodoc@special@begin{Links}
+\let\AM@linktodoc@special@end\relax
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\def\AM@survey@special@begin{\AM@notsupported{Option survey}}
+\let\AM@survey@special@end\relax
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\def\AM@thread@special@begin{\AM@notsupported{Option thread}}
+\let\AM@thread@special@end\relax
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\def\AM@dest@special{\AM@notsupported{Links}}
+\def\AM@anchor@special{\AM@notsupported{Links}}
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \begin{macrocode}
+\def\AM@convert@dest#1{}
+\def\AM@region@calc{}
+% \end{macrocode}
+% Do not disable |\includegraphics|.
+% \begin{macrocode}
+\let\AM@disable@includegraphics\relax
+% \end{macrocode}
+% Add option page to |\includegraphics|.
+% \begin{macrocode}
+\@ifundefined{KV@Gin@page}{%
+ \define@key{Gin}{page}{%
+ \ifnum#1=1 %
+ \else
+ \PackageError{pdfpages}{%
+ Multipage images are not supported by driver dvips%
+ }\@ehc
+ \fi
+ }}{}
+% \end{macrocode}
+%
+% \iffalse
+%</ppdvipsdef>
+%
+%<*ppdvipdfmxdef>
+% \fi
+%
+% \subsubsection{Dvipdfmx driver}
+%
+% Driver |dvipdfmx| must be invoked explicitely by the user. There are
+% several ways to do this. Though only the first of the following ways is
+% recommended.
+%
+% \begin{itemize}
+% \item
+% This is the recommended way. PDF output as expected.
+% \begin{quote}
+% |\documentclass[a4paper,dvipdfmx]{article}|\\
+% |\usepackage{pdfpages}|
+% \end{quote}
+%
+% \item
+% Warning. Forcing dvipdfmx.def. PDF output as expected.
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% |\usepackage[dvipdfmx]{pdfpages}|
+% \end{quote}
+%
+% \item
+% Assuming user wants to use dvips. Therefor pdfpages will just insert
+% empty pages.
+% \begin{quote}
+% |\documentclass[a4paper]{article}|\\
+% |\usepackage{pdfpages}|
+% \end{quote}
+% \end{itemize}
+%
+%
+% \noindent
+% Package |graphicx| should be loaded with the |dvipdfmx| driver.
+% However, \break |\RequirePackage[dvipdfmx]{graphicx}| is not recommended
+% because it will cause an `option clash' if a user loaded |graphicx|
+% with additional options previously. Thus, we expect the user to load
+% |graphicx| with |dvipdfmx| driver before loading pdfpages.
+% \begin{macrocode}
+\def\AM@tmp{dvipdfmx.def}
+\ifx\Gin@driver\AM@tmp\else
+ \PackageWarningNoLine{pdfpages}{%
+ Graphicx.sty not loaded with driver `dvipdfmx'.\MessageBreak
+ Please, specify the driver as a class option\MessageBreak
+ \@spaces \string\documentclass[dvipdfmx]{...}\MessageBreak
+ or load graphicx explicitely before pdfpages,\MessageBreak
+ e.g.:\MessageBreak
+ \@spaces \string\usepackage[dvipdfmx]{graphicx}\MessageBreak
+ \@spaces \string\usepackage[dvipdfmx]{pdfpages}\MessageBreak
+ This time I will try to load `dvipdfmx.def' which \MessageBreak
+ will overwrite `\string\Gin@driver'.\MessageBreak
+ Let's hope for the best}%
+ \input{dvipdfmx.def}%
+\fi
+% \end{macrocode}
+% Packages like ngerman.sty make " with catcode 11 active. So let's
+% use " with catcode 12 to delimit arguments.
+% \begin{macrocode}
+{\catcode`\"=12
+ \gdef\AM@quote{"}%
+}%
+% \end{macrocode}
+% Get last page number.
+% This driver uses the external program |extractbb| to retrieve the total number
+% of pages. Many thanks to Noriyuki Abe who provided this code.
+% \begin{macrocode}
+\def\AM@getpagecount{%
+% \end{macrocode}
+% Try reading |.xbb| file if available.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\AM@get@xbb@filename
+ \csname Gin@rule@.pdf\endcsname\AM@currentdocname
+ \immediate\openin\@inputcheck=\AM@xbb@filename
+ \AM@read@xbb\@inputcheck
+ \immediate\closein\@inputcheck
+% \end{macrocode}
+% Try reading output of program |extractbb|.
+% \begin{macrocode}
+ \ifx\AM@pagecount\AM@undefined
+ \immediate\openin\@inputcheck=
+ \AM@quote|extractbb -O \AM@currentdocname\AM@quote
+ \AM@read@xbb\@inputcheck
+ \immediate\closein\@inputcheck
+ \fi
+% \end{macrocode}
+% If all fails set number of pages to 1. Maybe it is a graphics file
+% like |jpg|, |png|, etc.
+% \begin{macrocode}
+ \ifx\AM@pagecount\AM@undefined
+ \def\AM@pagecount{1}
+ \fi
+}
+% \end{macrocode}
+% Construct filename of |xbb| file.
+% |#1:{pdf}, #2:{.xbb}, #3:{file.pdf}|
+% \begin{macrocode}
+\def\AM@get@xbb@filename#1#2#3{%
+ \filename@parse{#3}%
+ \edef\AM@xbb@filename{\filename@area\filename@base#2}%
+}
+% \end{macrocode}
+% Read ouput of program |extractbb|.
+% \begin{macrocode}
+\def\AM@read@xbb#1{%
+ \@tempswatrue
+ \loop
+ \ifeof#1
+ \@tempswafalse
+ \else
+ \begingroup
+ \catcode`\%=12\relax
+ \immediate\global\read#1 to \@tempa
+ \endgroup
+ \expandafter\AM@find@pages\@tempa:\relax
+ \fi
+ \if@tempswa\repeat
+}
+% \end{macrocode}
+% Find string |%%Pages:|
+% \begin{macrocode}
+\long\def\AM@find@pages#1:#2\relax{%
+ \def\@tempb{#1}%
+ \edef\@tempc{\@percentchar\@percentchar Pages}%
+ \ifx\@tempb\@tempc\AM@set@pagecount#2\fi
+}
+\def\AM@set@pagecount#1:{\def\AM@pagecount{#1}}
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\paperwidth
+ \AM@pageheight=\paperheight
+}
+\def\AM@setpagedimen{%
+ \special{pdf:pagesize width \the\AM@pagewidth\space
+ height \the\AM@pageheight\space}%
+}
+\def\AM@pagesize@boogie{%
+ \ifdim\AM@pagewidth=\z@
+ \ifdim\AM@pageheight=\z@
+ \let\AM@pagewidth\paperwidth
+ \let\AM@pageheight\paperheight
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\def\AM@setRotate{\special{pdf: put @thispage <</Rotate 90>>}}%
+\def\AM@resetRotate{}
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\let\AM@fitpaper@special\relax
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \AM@findfile@i{#1}{pdf}%
+ \AM@findfile@ii{#1}%
+}
+\let\AM@IfFileExists\IfFileExists
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\def\AM@linktodoc@special@begin{%
+ \special{pdf: ann
+ width \the\wd\@tempboxa\space
+ height \the\ht\@tempboxa\space
+ depth \the\dp\@tempboxa\space
+ << /Type /Annot
+ /Subtype /Link /Border [0 0 0]
+ /A << /S /GoToR
+ /F (\AM@linkfilename)
+ /D [\AM@linktodoc@page@m@ne \AM@linktodocfit]
+ \ifAM@newwindow/NewWindow true\fi >>
+ >>}%
+}
+\let\AM@linktodoc@special@end\relax
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\let\AM@survey@special@begin\relax
+\let\AM@survey@special@end\relax
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\def\AM@thread@special@begin{%
+ \special{pdf: thread @\AM@threadname\space
+ width \the\wd\@tempboxa\space
+ height \the\ht\@tempboxa\space
+ depth \the\dp\@tempboxa\space
+ <<\threadinfodict>>}%
+}
+\let\AM@thread@special@end\relax
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\def\AM@view{/Fit}
+\def\AM@dest@special{%
+ \special{pdf: dest (\AM@linkname.\AM@page) [ @thispage \AM@view ]}}
+\def\AM@anchor@special{%
+ \special{pdf: dest (pdfpages.\the\count1) [ @thispage /Fit ]}}
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \begin{macrocode}
+\def\AM@convert@dest#1{%
+ \expandafter\AM@convert@dest@i\ifdim\z@=0pt#1 \END\fi}
+\def\AM@convert@dest@i#1 #2\END{%
+ \begingroup
+ \def\tag{#1}%
+ \def\x{FitH}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitH @ypos}%
+ \else
+ \def\x{FitBH}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitBH @ypos}%
+ \else
+ \def\x{FitV}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitV @xpos}%
+ \else
+ \def\x{FitBV}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitBV @xpos}%
+ \else
+ \def\x{fitr}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \PackageWarningNoLine{pdfpages}{%
+ `linkfit=FitR' is not supported.}%
+ \else
+ \def\x{FitB}%
+ \ifx\x\tag
+ \gdef\AM@view{/FitB}%
+ \else
+ \def\x{XYZ}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \else
+ \def\x{Region}%
+ \ifx\x\tag
+ \gdef\AM@view{/XYZ @xpos @ypos null}%
+ \PackageWarningNoLine{pdfpages}{%
+ `linkfit=Region' is not supported by dvipdfmx.}%
+ \else
+ \gdef\AM@view{/Fit}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+\def\AM@region@calc{}
+% \end{macrocode}
+% Do not disable |\includegraphics|.
+% \begin{macrocode}
+\let\AM@disable@includegraphics\relax
+% \end{macrocode}
+%
+% \iffalse
+%</ppdvipdfmxdef>
+%
+%<*ppnulldef>
+% \fi
+%
+% \subsubsection{Null driver}
+% This is a dummy driver used when producing {\small DVI} output.
+%
+% \begin{macrocode}
+\AM@DVIoutputtrue
+\PackageWarningNoLine{pdfpages}{%
+ I will use a dummy \string\includepdf\space command which\MessageBreak
+ will insert empty pages instead of the actual PDF,\MessageBreak
+ because we are running in
+ \ifAM@pkg@demo `demo' mode%
+ \else DVI mode or with\MessageBreak dvips driver%
+ \fi}
+% \end{macrocode}
+% Find file: the file must not exist for this dummy driver. Let's just
+% set \cmd{\AM@currentdocname}.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \def\AM@currentdocname{#1}%
+}
+\let\AM@IfFileExists\IfFileExists
+% \end{macrocode}
+% Get last page number.
+% \begin{macrocode}
+\def\AM@getpagecount{%
+ \ifx\AM@pagecount\AM@undefined
+ \PackageWarningNoLine{pdfpages}{%
+ I cannot determine the number of pages of the\MessageBreak
+ included document, because we are running in\MessageBreak
+ \ifAM@pkg@demo `demo' mode.
+ \else DVI mode.
+ \fi
+ \MessageBreak
+ You can use the option `lastpage' to give me a hint}%
+ \edef\AM@pagecount{1}%
+ \fi
+}
+% \end{macrocode}
+% Page dimensions.
+% \begin{macrocode}
+\def\AM@getpagedimen{%
+ \AM@pagewidth=\paperwidth
+ \AM@pageheight=\paperheight
+}
+\def\AM@setpagedimen{%
+ \paperwidth\AM@pagewidth
+ \paperheight\AM@pageheight
+}
+\let\AM@pagesize@boogie\relax
+% \end{macrocode}
+% Change paper size.
+% \begin{macrocode}
+\let\AM@fitpaper@special\relax
+% \end{macrocode}
+% Find file.
+% \begin{macrocode}
+\def\AM@findfile#1{%
+ \def\AM@currentdocname{}%
+}
+% \end{macrocode}
+% Rotate page.
+% \begin{macrocode}
+\let\AM@setlscape\relax
+% \end{macrocode}
+% Link to original document.
+% \begin{macrocode}
+\let\AM@linktodoc@special@begin\relax
+\let\AM@linktodoc@special@end\relax
+% \end{macrocode}
+% Survey.
+% \begin{macrocode}
+\let\AM@survey@special@begin\relax
+\let\AM@survey@special@end\relax
+% \end{macrocode}
+% Thread.
+% \begin{macrocode}
+\let\AM@thread@special@begin\relax
+\let\AM@thread@special@end\relax
+% \end{macrocode}
+% Destination of links.
+% \begin{macrocode}
+\let\AM@dest@special\relax
+\let\AM@anchor@special\relax
+% \end{macrocode}
+% Convert synatx of \PDF\ destinations.
+% \begin{macrocode}
+\def\AM@convert@dest#1{}
+% \end{macrocode}
+% Disable |\includegraphics|.
+% \begin{macrocode}
+\def\AM@disable@includegraphics{%
+ \renewcommand\includegraphics[2][]{}%
+}
+% \end{macrocode}
+% Don't check page numbers.
+% \begin{macrocode}
+\newcommand*{\AM@checkpagenumber}[1]{}
+% \end{macrocode}
+% \begin{macrocode}
+\def\AM@region@calc{}
+% \end{macrocode}
+%
+% \iffalse
+%</ppnulldef>
+% \fi
+%
+% \section{History}
+%
+% \subsection*{2001/01/17 v0.1b}
+% \begin{itemize}
+% \item The first released version.
+% \end{itemize}
+%
+% \subsection*{2001/02/03 v0.1c}
+% \begin{itemize}
+% \item Pages are being centered automatically.
+% \end{itemize}
+%
+% \subsection*{2001/03/16 v0.1f}
+% \begin{itemize}
+% \item Option |pages| added.
+% \end{itemize}
+%
+% \subsection*{2001/04/07 v0.1h}
+% \begin{itemize}
+% \item Hypertext operations added. (Hyperlinks, threads)
+% \end{itemize}
+%
+% \subsection*{2001/11/12 v0.2}
+% \begin{itemize}
+% \item Support of |m|$\times$|n| logical pages on each sheet of paper.
+% \item Options |column| and |columnstrict| added.
+% \item New command |\inlcudepdfmerge|.
+% \end{itemize}
+%
+% \subsection*{2001/12/26 v0.2c}
+% \begin{itemize}
+% \item Option |fitpaper| added.
+% \end{itemize}
+%
+% \subsection*{2001/03/31 v0.2g}
+% \begin{itemize}
+% \item Option |signature| added.
+% \item Options |addtotoc| and |addtolist| added.
+% \item Option |doublepages| added.
+% \item Options now have their own namespace |pdfpages| and do not extent
+% the |Gin| (graphicx) namespace any longer.
+% \end{itemize}
+%
+% \subsection*{2002/12/14 v0.2l}
+% \begin{itemize}
+% \item Survey functionality added.
+% \end{itemize}
+%
+% \subsection*{2003/06/02 v0.2m}
+% \begin{itemize}
+% \item Support of \PDF s with mixed portrait/landscape pages. Options
+% |pagetemplate| and |rotateoversize| added.
+% \item Support of |\graphicspath|.
+% \item Options |picturecommand| and |picturecommand*| added.
+% \item Reverse page order: |pages=7-3|, |pages=last-5|
+% \end{itemize}
+%
+% \subsection*{2003/06/21 v0.3a}
+% \begin{itemize}
+% \item Support of \VTeX.
+% \item Driver layer added. All driver specific macros are defined in
+% |.def| driver files.
+% \end{itemize}
+%
+% \subsection*{2003/07/16 v0.3b}
+% \begin{itemize}
+% \item Option |\doublepagestwist| added.
+% \end{itemize}
+%
+% \subsection*{2003/12/08 v0.3e}
+% \begin{itemize}
+% \item Option |reflect| added.
+% \item Made |\AddToSurvey| work within TeXpower's |\stepwise|.
+% \end{itemize}
+%
+% \subsection*{2004/02/21 v0.3f}
+% \begin{itemize}
+% \item Option |signature*| (right-edge binding) added.
+% \item Optimizations for a faster processing of signatures.
+% \end{itemize}
+%
+% \subsection*{2006/08/05 v0.4a}
+% \begin{itemize}
+% \item Support of \DVI\ mode: Insertion of empty pages instead of
+% interrupting execution.
+% \item Option |lastpage| added.
+% \end{itemize}
+%
+% \subsection*{2007/04/21 v0.4b}
+% \begin{itemize}
+% \item Support of \XeTeX.
+% \end{itemize}
+%
+% \subsection*{2008/04/27 v0.4d}
+% \begin{itemize}
+% \item A more robust check of |\XeTeXversion|.
+% \end{itemize}
+%
+% \subsection*{2008/05/11 v0.4e}
+% \begin{itemize}
+% \item Make |\AM@trim@leadingspace| robust to allow macros
+% in the caption argument of |addtolist|.
+% \end{itemize}
+%
+% \subsection*{2008/06/05 v0.4f}
+% \begin{itemize}
+% \item If |fitpaper| is used together with |angle| the resulting
+% |\@tempboxa| might have a depth unequal to zero. Taking this
+% into consideration when calculation page dimensions.
+% \end{itemize}
+%
+% \subsection*{2008/10/17 v0.4g}
+% \begin{itemize}
+% \item Macro |\AM@region@calc| was missing in the VTeX driver.
+% \end{itemize}
+%
+% \subsection*{2009/06/07 v0.4h}
+% \begin{itemize}
+% \item Added dvips driver provided by Heiko Oberdiek.
+% \end{itemize}
+%
+% \subsection*{2009/10/11 v0.4i}
+% \begin{itemize}
+% \item Added dvipdfm driver.
+% \item |\AM@toc@title| uses |\ignorespaces|, |\AM@lof@heading|
+% doesn't need that
+% \end{itemize}
+%
+% \subsection*{2010/01/12 v0.4j}
+% \begin{itemize}
+% \item Make |\AM@reflectbox| and |\AM@fbox| global definitions which is
+% necessary for package textpos.sty.
+% \item Refrain from setting |\AM@localxoff|, |\AM@localyoff|,
+% and |\AM@localscale| if option |noautoscale| is used.
+% \end{itemize}
+%
+% \subsection*{2010/08/08 v0.4k}
+% \begin{itemize}
+% \item Bugfix for memoir chapter classes.
+% \end{itemize}
+%
+% \subsection*{2010/11/26 v0.4l}
+% \begin{itemize}
+% \item Bugfix: In `signatures' the sign of |xoffset| must
+% change on every second page.
+% \end{itemize}
+%
+% \subsection*{2010/12/18 v0.4m}
+% \begin{itemize}
+% \item Bugfix: Wrong offset of signature.
+% \end{itemize}
+%
+% \subsection*{2011/03/10 v0.4n}
+% \begin{itemize}
+% \item Bugfix: In |\includepdfmerge|, |\AM@readlist| has to be
+% after |\setkeys|.
+% \end{itemize}
+%
+%
+% \subsection*{2011/07/02 v0.4p}
+% \begin{itemize}
+% \item Bugfix: |templatesize| ignored |scale| option.
+% \end{itemize}
+%
+%
+% \subsection*{2012/03/08 v0.4q}
+% \begin{itemize}
+% \item Macro |\AM@checkinteger| rewritten.
+% \item Loading |graphicx.sty| without explicit driver information.
+% \end{itemize}
+%
+% \subsection*{2012/04/03 v0.4s}
+% \begin{itemize}
+% \item Revert to the older |\AM@checkinteger| but now with changed
+% catcode for |_| (underscore).
+% \end{itemize}
+%
+% \subsection*{2012/08/28 v0.4t}
+% \begin{itemize}
+% \item Add option |duplicatepages|. Requested by Allan Pickett.
+% \end{itemize}
+%
+% \subsection*{2013/05/30 v0.4u}
+% \begin{itemize}
+% \item Compatibility with |import.sty|.
+% \end{itemize}
+%
+% \subsection*{2013/08/25 v0.4v}
+% \begin{itemize}
+% \item |\pdflastximagepages| is not updated if using |\includegraphics|
+% on the same file repeatedly. The provided fix is temporarily until
+% there's a better solution implemented in |pdftex.def|.
+% \end{itemize}
+%
+% \subsection*{2015/04/14 v0.4w}
+% \begin{itemize}
+% \item Driver file for \luaTeX:
+% So far \luaTeX\ used the driver file of \pdfTeX, which does not work
+% any more. As of luaTeX-0.80 the deprecated primitive |\pdftexversion| is
+% removed. Thus \luaTeX\ chokes on the code for checking the version number
+% of \pdfTeX. Therefore \luaTeX\ gets its on driver file |ppluatex.def|.
+% \end{itemize}
+%
+% \subsection*{2015/05/04 v0.4x}
+% \begin{itemize}
+% \item Issue with uppercase filename extentions in ppxetex.def fixed.
+% \item Issue with suspending of floats, and bang floats, during output fixed.
+% \end{itemize}
+%
+% \subsection*{2015/07/06 v0.4z}
+% \begin{itemize}
+% \item Package option `demo' added.
+% \end{itemize}
+%
+% \subsection*{2015/07/18 v0.5a}
+% \begin{itemize}
+% \item Driver dvipdfm removed.
+% \item Driver dvipdfmx added.
+% \end{itemize}
+%
+% \subsection*{2015/08/13 v0.5b}
+% \begin{itemize}
+% \item Driver dvipdfmx uses |extractbb| to get the total number of
+% pages of a PDF.
+% \end{itemize}
+%
+% \subsection*{2015/09/18 v0.5d}
+% \begin{itemize}
+% \item \emph{Iff} pdflscape is \emph{not} loaded by the user explicitly,
+% reset modification of the landscape environment after loading
+% pdflscape.
+% \end{itemize}
+%
+% \subsection*{2016/04/10 v0.5e}
+% \begin{itemize}
+% \item Cope with new primitive names introduced in LuaTeX 0.85.
+% \item Respect eso-pic's option |texcoord|.
+% \end{itemize}
+%
+% \subsection*{2016/04/19 v0.5f}
+% \begin{itemize}
+% \item Use |\includegraphics[width=!,height=!,...]{...}| to (kind of)
+% disable |width| and |height| options.
+% \item All (really all) options can be made global with
+% |\includepdfset|. (It's no more restricted to options of pdfpages.)
+% \end{itemize}
+%
+% \subsection*{2016/12/11 v0.5g}
+% \begin{itemize}
+% \item Conflict between |nup| and |addtotoc| fixed. A |\newpage| was triggered
+% on each page where |addtotoc| inserted a label.
+% \end{itemize}
+%
+% \subsection*{2017/01/12 v0.5h}
+% \begin{itemize}
+% \item Do not use |\stockwidth| to check for memoir, |\stockwidth| is used
+% by other packages as well.
+% \end{itemize}
+%
+% \subsection*{2017/06/13 v0.5i}
+% \begin{itemize}
+% \item Since 2017/06/01 (v5.0a) xetex.def does not define
+% |\def\G@pdf@ext{.pdf}| any more. In consequence of removing
+% |\G@pdf@ext| pdfpages could no longer determine the number of pages
+% of a PDF correctly.
+% \end{itemize}
+%
+% \subsection*{2017/07/14 v0.5j}
+% \begin{itemize}
+% \item Fixed |addtolist| which was broken when used with |float.sty|.
+% \end{itemize}
+%
+% \subsection*{2017/08/14 v0.5k}
+% \begin{itemize}
+% \item Documentation.
+% \end{itemize}
+%
+%
+% \subsection*{2017/10/31 v0.5l}
+% \begin{itemize}
+% \item Signatures for right edge binding were wrong when using
+% |signature*| and |landscape| together.
+% \end{itemize}
+%
+% \Finale
+%
+% \iffalse
+%<*example1>
+\documentclass[a4paper,12pt]{article}
+\usepackage[final]{pdfpages}
+\usepackage{verbatim}
+%% Uncomment the following lines, if you want to produce thumbnails.
+%%\usepackage{pdflscape}
+%%\usepackage{thumbpdf}
+
+\newcounter{example}
+\setcounter{example}{1}
+
+\newenvironment{example}
+ {\par\vskip\topsep%
+ \noindent\textbf{Example \arabic{example}:}%
+ \stepcounter{example}%
+ \par\vskip\topsep%
+ \minipage{.9\linewidth}%
+ \verbatim}
+ {\endverbatim%
+ \endminipage\par\vskip\topsep}
+
+\begin{document}
+
+\title{A Demonstration of the \texttt{pdfpages} Package}
+\author{Andreas MATTHIAS}
+\maketitle
+
+This is a demonstration of the \texttt{pdfpages} package.
+It is \textit{not} the documentation of the package.
+To get the documentation run: `latex pdfpages.dtx'
+
+\tableofcontents
+
+\section{Inserting Pages:}
+\begin{example}
+\includepdf[pages=3-5]{dummy.pdf}
+\end{example}
+\includepdf[pages=3-5]{dummy.pdf}
+
+\section{Using the \texttt{nup} Option}
+Arranging several logical pages on one sheet of paper.
+
+\begin{example}
+\includepdf[nup=1x2, landscape, pages=4-7]{dummy.pdf}
+\end{example}
+\includepdf[nup=1x2, landscape, pages=4-7]{dummy.pdf}
+
+Use the option \texttt{turn=false}, if the pages
+should not be displayed in landscape orientation.
+(If the last two pages were not displayed in
+landscape orientation, you use a PDF viewer that
+does not support this option.)
+
+\begin{example}
+\includepdf[nup=1x2, landscape,
+ pages=4-7, turn=false]{dummy.pdf}
+\end{example}
+\includepdf[nup=1x2, landscape,
+ pages=4-7, turn=false]{dummy.pdf}
+
+\begin{example}
+\includepdf[nup=1x2, pages=1-4]{dummy-l.pdf}
+\end{example}
+\includepdf[nup=1x2, pages=1-4]{dummy-l.pdf}
+
+\noindent
+With the option \texttt{pages} special pages and
+ranges of pages can be selected.
+
+\begin{example}
+\includepdf[nup=3x2, pages={1,4-6,8,10}]{dummy.pdf}
+\end{example}
+\includepdf[nup=3x2, pages={1,4-6,8,10}]{dummy.pdf}
+
+\noindent
+A column-major layout can be achieved with the
+option \texttt{column}.
+
+\begin{example}
+\includepdf[nup=2x2, pages=1-4, column]{dummy.pdf}
+\end{example}
+\includepdf[nup=2x2, pages=1-4, column]{dummy.pdf}
+
+
+\noindent
+Sometimes it might be useful to put an empty page
+at the beginning.
+\begin{example}
+\includepdf[nup=2x2, pages={{},5-7}]{dummy.pdf}
+\end{example}
+\includepdf[nup=2x2, pages={{},5-7}]{dummy.pdf}
+
+
+\section{Changing Layout}
+
+To put some space between the logical pages, use the option
+\texttt{delta}.
+
+Any options of \verb|\includegraphics| are allowed in
+\verb|\includepdf| as well. See the \texttt{scale}
+option in the next example.
+\begin{example}
+\includepdf[nup=2x2, pages=3-6, scale=.8,
+ delta=8mm 11mm, frame]{dummy.pdf}
+\end{example}
+\includepdf[nup=2x2, pages=3-6, scale=.8,
+ delta=8mm 11mm, frame]{dummy.pdf}
+
+\noindent
+By default the output is centered, as you could see in
+the last examples. With the \texttt{offset} option it is
+possible to displace the output.
+
+\begin{example}
+\includepdf[nup=2x2, pages=3-6, scale=.8,
+ offset=5mm 7mm, frame]{dummy.pdf}
+\end{example}
+\includepdf[nup=2x2, pages=3-6, scale=.8,
+ offset=5mm 7mm, frame]{dummy.pdf}
+
+
+\noindent
+To remove the header and the footer of the inserted
+document use the \texttt{trim} and \texttt{clip}
+options of the \texttt{graphicx} package.
+
+\begin{example}
+\includepdf[nup=2x2, pages=1-4,
+ trim=0 40mm 0 40mm,
+ clip, pagecommand={}]{dummy.pdf}
+\end{example}
+
+
+\noindent The option
+\verb|pagecommand={\thispagestyle{empty}}|
+is set by default. If you don't want the page style
+to be set to empty, you can remove this default
+setting by using the \texttt{pagecommand} option
+as follows:
+\verb|pagecommand={}|.
+
+\includepdf[nup=2x2, pages=1-4,
+ trim=0 40mm 0 40mm,
+ clip, pagecommand={}]{dummy.pdf}
+
+
+\noindent
+You like the crazy way? Then try this one \texttt{;-)}
+\begin{example}
+\includepdf[pages={3,4}, nup=1x2,
+ landscape, scale=1.1,
+ angle=30, delta=0 -85mm]{dummy.pdf}
+\end{example}
+\includepdf[pages={3,4}, nup=1x2,
+ landscape, scale=1.1,
+ angle=30, delta=0 -85mm]{dummy.pdf}
+
+
+\end{document}
+%</example1>
+%
+%
+%
+%<*example2>
+\documentclass[a4paper,12pt]{article}
+\usepackage[final]{pdfpages}
+\usepackage{verbatim}
+%% Uncomment the following lines, if you want to produce thumbnails.
+%%\usepackage{pdflscape}
+%%\usepackage{thumbpdf}
+\usepackage[bookmarksopen]{hyperref}
+
+\newcounter{example}
+\setcounter{example}{1}
+
+\newenvironment{example}
+ {\par\vskip\topsep%
+ \noindent\textbf{Example \arabic{example}:}%
+ \stepcounter{example}%
+ \par\vskip\topsep%
+ \minipage{.9\linewidth}%
+ \verbatim}
+ {\endverbatim%
+ \endminipage\vskip\topsep}
+
+\newcommand{\meta}[1]{\ensuremath\langle\texttt{#1}\ensuremath\rangle}
+\newcommand{\link}[2]{\meta{#1}.\meta{#2}}
+
+\newcommand*{\bookmark}[3][0]{%
+ \pdfoutline user {<< /S /GoTo /D (#3) >>} count #1 {#2}}
+
+
+\begin{document}
+
+\title{A Demonstration of the Hypertext Operations\\
+ of the \texttt{pdfpages} Package}
+\author{Andreas MATTHIAS}
+\maketitle
+
+This is a demonstration of the \texttt{pdfpages} package.
+It is \textit{not} the documentation of the package.
+To get the documentation run: `latex pdfpages.dtx'
+
+\tableofcontents
+
+\section{Hyperlinks}
+\subsection{Links to the inserted Pages}
+
+Hyperlinks are created by using the option \texttt{link}
+of the \verb|\includepdf| command. Each inserted page
+gets a link name consisting of the filename and
+the page number: \link{filename}{page number}
+
+\begin{example}
+\includepdf[pages=1-2, link]{dummy.pdf}
+\end{example}
+
+In this example the two pages have the link names
+`\texttt{dummy.pdf.1}' and `\texttt{dummy.pdf.2}'.
+Setting links to these
+pages, can be done easily with the \verb|\hyperlink|
+macro from the \texttt{hyperref.sty} package:
+
+\bigskip
+\verb|\hyperlink{dummy.pdf.1}{Page 1}|\hskip10pt \hyperlink{dummy.pdf.1}{Page 1}\par
+\verb|\hyperlink{dummy.pdf.2}{Page 2}|\hskip10pt \hyperlink{dummy.pdf.2}{Page 2}
+\bigskip
+
+This way you can refer to the \hyperlink{dummy.pdf.1}{first}
+and the \hyperlink{dummy.pdf.2}{second page}.
+
+\includepdf[pages=1-2, link]{dummy.pdf}
+
+
+Inserting the same page twice would result in two
+identical link names. To prevent this use the option
+\texttt{linkname} to specify another name for the links.
+
+\begin{example}
+\includepdf[pages=1-2, nup=1x2, landscape,
+ link, linkname=mylink]{dummy.pdf}
+\end{example}
+
+\noindent
+Now the links are called `\texttt{mylink.1}' and
+`\texttt{mylink.2}'.
+
+\bigskip
+\verb|\hyperlink{mylink.1}{Page 1}|\hskip10pt \hyperlink{mylink.1}{Page 1}\par
+\verb|\hyperlink{mylink.2}{Page 2}|\hskip10pt \hyperlink{mylink.2}{Page 2}
+
+\includepdf[pages=1-2, nup=1x2, landscape,
+ link, linkname=mylink]{dummy.pdf}
+
+\subsection{Links to the original Document}
+
+Each page can be a hyperlink to the document from
+which it was extracted. This can be done with the
+option \texttt{linktodoc}.
+
+Click on the inserted pages and see what happens.
+
+\begin{example}
+\includepdf[pages=1-4, nup=2x2, linktodoc]{dummy.pdf}
+\end{example}
+\includepdf[pages=1-4, nup=2x2, linktodoc]{dummy.pdf}
+
+
+\section{Article Threads}
+
+In a PDF document one or more article threads may be defined.
+An article thread is a logical connected sequence of content
+items.
+
+With the option \texttt{thread} the inserted pages become
+an article thread.
+
+\begin{example}
+\includepdf[pages=1-4, nup=2x2, column,
+ landscape, thread]{dummy-l.pdf}
+\end{example}
+
+In Acrobat Reader the mouse pointer changes to a hand with
+a little arrow in it when moved over an article thread.
+By clicking on the page you can easily follow the logical
+structure of the article thread.
+
+\includepdf[pages=1-4, nup=2x2, column,
+ landscape, thread]{dummy-l.pdf}
+
+\end{document}
+%</example2>
+%
+%
+%<*example3>
+\documentclass[a4paper]{book}
+\usepackage{pdfpages}
+\usepackage{verbatim}
+\usepackage[plainpages=false, pdfpagelabels,
+ bookmarksopen]{hyperref}
+
+\begin{document}
+\tableofcontents
+
+\chapter{How to create a toc}
+
+The next pages were inserted using the following command:
+
+\begin{verbatim}
+\includepdf[pages=1-6,
+ pagecommand={},
+ addtotoc={1, chapter, 0, Main chapter, cha:main,
+ 1, section, 1, First section, sec:first,
+ 3, section, 1, Second section, sec:second},
+ trim=0 120 0 120, clip]{dummy.pdf}
+\end{verbatim}
+
+\noindent
+See Chapter \ref{cha:main} (\nameref{cha:main}) on page
+\pageref{cha:main}.\par\noindent
+See Section \ref{sec:first} (\nameref{sec:first}) on page
+\pageref{sec:first}.\par\noindent
+See Section \ref{sec:second} (\nameref{sec:second}) on page
+\pageref{sec:second}.
+
+\includepdf[pages=1-6,
+ pagecommand={},
+ addtotoc={1, chapter, 0, Main chapter, cha:main,
+ 1, section, 1, First section, sec:first,
+ 3, section, 1, Second section, sec:second},
+ trim=0 120 0 120, clip]{dummy.pdf}
+
+\end{document}
+%</example3>
+%
+%<*installer>
+\input docstrip
+\askforoverwritefalse
+\keepsilent
+
+\preamble
+\endpreamble
+
+\declarepreamble\package
+
+This file is part of the pdfpages package.
+
+\endpreamble
+
+\declarepreamble\example
+
+This file demonstrates how to use the pdfpages package.
+\endpreamble
+
+\generate{\usepreamble\package
+ \file{pdfpages.sty}{\from{pdfpages.dtx}{package}}}
+\generate{\usepreamble\package
+ \file{pppdftex.def}{\from{pdfpages.dtx}{pppdftexdef}}}
+\generate{\usepreamble\package
+ \file{ppluatex.def}{\from{pdfpages.dtx}{ppluatexdef}}}
+\generate{\usepreamble\package
+ \file{ppvtex.def}{\from{pdfpages.dtx}{ppvtexdef}}}
+\generate{\usepreamble\package
+ \file{ppxetex.def}{\from{pdfpages.dtx}{ppxetexdef}}}
+\generate{\usepreamble\package
+ \file{ppdvips.def}{\from{pdfpages.dtx}{ppdvipsdef}}}
+\generate{\usepreamble\package
+ \file{ppdvipdfmx.def}{\from{pdfpages.dtx}{ppdvipdfmxdef}}}
+\generate{\usepreamble\package
+ \file{ppnull.def}{\from{pdfpages.dtx}{ppnulldef}}}
+
+%% \generate{\usepreamble\package
+%% \file{pdfpages.drv}{\from{pdfpages.dtx}{driver}}}
+
+\generate{\usepreamble\example
+ \file{pdf-ex.tex}{\from{pdfpages.dtx}{example1}}}
+\generate{\usepreamble\example
+ \file{pdf-hyp.tex}{\from{pdfpages.dtx}{example2}}}
+\generate{\usepreamble\example
+ \file{pdf-toc.tex}{\from{pdfpages.dtx}{example3}}}
+
+\Msg{**************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space pdfpages.sty}
+\Msg{* \space\space pppdftex.def}
+\Msg{* \space\space ppvtex.def}
+\Msg{* \space\space ppxetex.def}
+\Msg{* \space\space ppdvips.def}
+\Msg{* \space\space ppnull.def}
+\Msg{*}
+\Msg{* To produce the documentation, run the following}
+\Msg{* file through LaTeX:}
+\Msg{*}
+\Msg{* \space\space pdfpages.dtx}
+\Msg{*}
+\Msg{* The following files are examples demonstrating how to use}
+\Msg{* the pdfpages package.}
+\Msg{*}
+\Msg{* \space\space pdf-ex.tex}
+\Msg{* \space\space pdf-hyp.tex}
+\Msg{* \space\space pdf-toc.tex}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{**************************************************************}
+\endbatchfile
+%</installer>
+%
+%\fi
+\endinput
+%%%
+%%% Local Variables: ***
+%%% fill-column: 76 ***
+%%% End: ***
diff --git a/macros/latex/contrib/pdfpages/pdfpages.ins b/macros/latex/contrib/pdfpages/pdfpages.ins
new file mode 100644
index 0000000000..c3bc04dd2d
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/pdfpages.ins
@@ -0,0 +1,99 @@
+%%
+%% This is file `pdfpages.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pdfpages.dtx (with options: `installer')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pdfpages.ins.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pdfpages.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+\input docstrip
+\askforoverwritefalse
+\keepsilent
+
+\preamble
+\endpreamble
+
+\declarepreamble\package
+
+This file is part of the pdfpages package.
+
+\endpreamble
+
+\declarepreamble\example
+
+This file demonstrates how to use the pdfpages package.
+\endpreamble
+
+\generate{\usepreamble\package
+ \file{pdfpages.sty}{\from{pdfpages.dtx}{package}}}
+\generate{\usepreamble\package
+ \file{pppdftex.def}{\from{pdfpages.dtx}{pppdftexdef}}}
+\generate{\usepreamble\package
+ \file{ppluatex.def}{\from{pdfpages.dtx}{ppluatexdef}}}
+\generate{\usepreamble\package
+ \file{ppvtex.def}{\from{pdfpages.dtx}{ppvtexdef}}}
+\generate{\usepreamble\package
+ \file{ppxetex.def}{\from{pdfpages.dtx}{ppxetexdef}}}
+\generate{\usepreamble\package
+ \file{ppdvips.def}{\from{pdfpages.dtx}{ppdvipsdef}}}
+\generate{\usepreamble\package
+ \file{ppdvipdfmx.def}{\from{pdfpages.dtx}{ppdvipdfmxdef}}}
+\generate{\usepreamble\package
+ \file{ppnull.def}{\from{pdfpages.dtx}{ppnulldef}}}
+
+%% \generate{\usepreamble\package
+%% \file{pdfpages.drv}{\from{pdfpages.dtx}{driver}}}
+
+\generate{\usepreamble\example
+ \file{pdf-ex.tex}{\from{pdfpages.dtx}{example1}}}
+\generate{\usepreamble\example
+ \file{pdf-hyp.tex}{\from{pdfpages.dtx}{example2}}}
+\generate{\usepreamble\example
+ \file{pdf-toc.tex}{\from{pdfpages.dtx}{example3}}}
+
+\Msg{**************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space pdfpages.sty}
+\Msg{* \space\space pppdftex.def}
+\Msg{* \space\space ppvtex.def}
+\Msg{* \space\space ppxetex.def}
+\Msg{* \space\space ppdvips.def}
+\Msg{* \space\space ppnull.def}
+\Msg{*}
+\Msg{* To produce the documentation, run the following}
+\Msg{* file through LaTeX:}
+\Msg{*}
+\Msg{* \space\space pdfpages.dtx}
+\Msg{*}
+\Msg{* The following files are examples demonstrating how to use}
+\Msg{* the pdfpages package.}
+\Msg{*}
+\Msg{* \space\space pdf-ex.tex}
+\Msg{* \space\space pdf-hyp.tex}
+\Msg{* \space\space pdf-toc.tex}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{**************************************************************}
+\endbatchfile
+\endinput
+%%
+%% End of file `pdfpages.ins'.
diff --git a/macros/latex/contrib/pdfpages/pdfpages.pdf b/macros/latex/contrib/pdfpages/pdfpages.pdf
new file mode 100644
index 0000000000..231079964c
--- /dev/null
+++ b/macros/latex/contrib/pdfpages/pdfpages.pdf
Binary files differ