使用 pdfpages 包含与长度相关的页面范围

使用 pdfpages 包含与长度相关的页面范围

我想使用 提取从 16 到 (最后一页减一) 的页面pdfpages。我知道我可以通过令牌 访问最后一页last,但我需要对其进行算术运算,以获得类似于 的页面范围16-(last-1)

有办法做到这一点吗pdfpages

答案1

假设你使用pdflatexTeXify 进行以下操作,

\documentclass{article}
\usepackage{pdfpages}


\begin{document}
\pdfximage{pstricks-doc.pdf}%
\newcount\N
\N=\pdflastximagepages\relax
\advance\N by -1\relax
\includepdf[pages=16-\the\N]{pstricks-doc}
\end{document}

对于 XeLaTeX (和 PDFLaTeX) 粉丝来说,

\documentclass{article}

\usepackage{pdfpages}
\usepackage{ifxetex}

\ifxetex
    \newcount\pdflastximagepages
    \def\pdfximage#1{\pdflastximagepages=\XeTeXpdfpagecount"#1"\relax}
\fi

\begin{document}
\pdfximage{filename.pdf}%
\newcount\N
\N=\pdflastximagepages\relax
\advance\N by -1\relax
\includepdf[pages=16-\the\N]{filename}
\end{document}

答案2

下面的重新定义\AM@checklast允许您现在使用新键prelast插入到倒数第二页:

\usepackage{pdfpages}% http://ctan.org/pkg/pdfpages
\makeatletter
\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
    \else\def\AM@cmp{prelast}% <------------------------- ADDED
      \ifx\AM@cmp\AM@tempii%                                  |
        \@tempcntb=\numexpr\number\AM@pagecount-1\relax%      |
        \edef\AM@tempii{\the\@tempcntb}%                      |
      \fi% <---------------------------------------------------
    \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
}
\makeatother

其背后的想法是为“页面”插入一个测试用例,并从正在阅读的文档的页数prelast中减一。\AM@pagecount

预期用途是

\includepdf[pages=16-prelast]{file}

相关内容