![使用 pdfpages 包含与长度相关的页面范围](https://linux22.com/image/252298/%E4%BD%BF%E7%94%A8%20pdfpages%20%E5%8C%85%E5%90%AB%E4%B8%8E%E9%95%BF%E5%BA%A6%E7%9B%B8%E5%85%B3%E7%9A%84%E9%A1%B5%E9%9D%A2%E8%8C%83%E5%9B%B4.png)
我想使用 提取从 16 到 (最后一页减一) 的页面pdfpages
。我知道我可以通过令牌 访问最后一页last
,但我需要对其进行算术运算,以获得类似于 的页面范围16-(last-1)
。
有办法做到这一点吗pdfpages
?
答案1
假设你使用pdflatex
TeXify 进行以下操作,
\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}