包括所含 PDF 文档的页面范围和页数

包括所含 PDF 文档的页面范围和页数

在 LuaLaTeX 中,我用来\includepdf[pages=-, noautoscale=true]{myEmbeddedDoc.pdf}包含外部多页 PDF 文件“myEmbeddedDoc.pdf”。(此命令由“pdfpages”包提供。\usepackage{pdfpages})在包含此 PDF 文档之前,我希望在我的 LaTeX 文档中显示文本“请参阅页面上嵌入的文档‘myEmbeddedDoc.pdf’X-页)”,其中X是所含文档的起始页,是所含文档的结束页,并且是所含文档的页数。我希望X, 和由 LaTeX 自动填充。这可能吗?如果可以,我该怎么做?(为了实现这一点,我是否需要不同的命令或 LaTeX 包来包含外部 PDF 文档?)

编辑:澄清我的问题:我想要包含的 PDF 文档的页码——即在包含的 LaTeX 文档的上下文中,不是解析所包含文档中的任何页码。例如,如果 myEmbeddedDoc.pdf(所包含的 PDF 文档)本身有 3 页长,并在 LaTeX 文档的第 4 页之后被包含(这意味着所包含的 PDF 文档将包含 LaTeX 文档的第 5-7 页),那么我希望 LaTeX 文档第 4 页上的文本显示“请参阅第 myEmbeddedDoc.pdf5-73页)。”我需要自动生成这些数字,因为这在我的 LaTeX 文档中已经完成了很多次。手动编辑生成的 PDF 文件是行不通的。

答案1

假设lipsum50.pdf包含 50 段 Lorem Ipsum 文本(由\lipsum[1-50]以下人员生成)lipsum

以下最小示例提供了\insertpdf[<opts>]{<PDF>}其工作原理,\includepdf[<opts>]{<PDF>}只需添加一个*-firstpage*-lastpage \label即可\pageref。此外,\pagediff{<PDF>}使用上述页面引用来计算包含的页面数*

在此处输入图片描述

\documentclass{article}

\usepackage{pdfpages,refcount}
\usepackage{lipsum}

\makeatletter
\newcommand{\insertpdf}[2][]{%
  \clearpage
  \label{#2-firstpage}%
  \includepdf[#1]{#2}%
  \immediate\write\@auxout{\string\newlabel{#2-lastpage}{{\@currentlabel}{\number\numexpr\value{page}-1}}}%
}
\newcommand{\pagediff}[1]{%
  \number\numexpr\getpagerefnumber{#1-lastpage}-\getpagerefnumber{#1-firstpage}+1\relax
}
\makeatother

\begin{document}

\section{A section}
\lipsum[1-30]% Pages 1-6

See pages \pageref{lipsum50-firstpage}-\pageref{lipsum50-lastpage} (\pagediff{lipsum50} pages).

\insertpdf[pages=1-3]{lipsum50}% Pages 7-9

\lipsum[31-50]% Pages 10-13

\end{document}

* 还有其他方法可以计算外部 PDF 中的页数。请参阅获取外部 PDF 的页数


Ahyperref兼容的解决方案需要稍微修改一下。第一个\pagereference 可以按原样使用,因为 是\label在包含的第一个页面上设置的。最后一个页面实际上是计算出来的,因此\pageref不能直接使用。相反,我们使用 直接指向页面page.X \hyperlink(参见指向给定页面的 PDF 超链接)。

\documentclass{article}

\usepackage{pdfpages,refcount,hyperref}
\usepackage{lipsum}

\makeatletter
\newcommand{\insertpdf}[2][]{%
  \clearpage
  \phantomsection
  \label{#2-firstpage}%
  \includepdf[#1]{#2}%
  \immediate\write\@auxout{\string\newlabel{#2-lastpage}{{\@currentlabel}{\number\numexpr\value{page}-1}{}{}{}}}%
}
\newcommand{\pagediff}[1]{%
  \number\numexpr\getpagerefnumber{#1-lastpage}-\getpagerefnumber{#1-firstpage}+1\relax
}
\makeatother

\begin{document}

\section{A section}
\lipsum[1-30]% Pages 1-6

See pages \pageref{lipsum50-firstpage}-%
  \hyperlink{page.\getpagerefnumber{lipsum50-lastpage}}{\pageref*{lipsum50-lastpage}} (\pagediff{lipsum50} pages).

\insertpdf[pages=1-3]{lipsum50}% Pages 7-9

\lipsum[31-50]% Pages 10-13

\end{document}

相关内容