我在我的文档中包含了一个多页 PDF,如下所示:
\begin{flushleft}
\textlabel{Annexure 5}{email}: Email exchange
\end{flushleft}
\includepdf[pages={1-},scale=0.75]{email.pdf}
PDF 跨越多页。我想引用 PDF 占用的页面范围。使用 \pageref{email} 我只得到起始页。
答案1
要引用多页 PDF 所占用的页面范围,您可以按以下方式使用\label
和命令:\pageref
\begin{flushleft}
\textlabel{Annexure 5}{email}: Email exchange (\pageref{email}-\pageref{emailend})
\end{flushleft}
\includepdf[pages={1-},scale=0.75]{email.pdf}
\label{emailend}
该\label
命令为 PDF 创建一个名为“email”的参考点。该\pageref
命令检索该参考点的页码。PDF\label
末尾的命令创建另一个名为“emailend”的参考点。该\pageref
命令检索该参考点的页码。最后,计算两个页码之间的差值,并在文本中显示页面范围。
答案2
您不会想逐字逐句地使用下面的代码,但它演示了一种可行的方法。我并没有完全使用这种方法,但我经常使用一些有点类似的方法,即从和获取总页数\pdfximage{}
。\pdflastximagepages
当我第一次研究这个方法时,我找不到高级接口,所以这个方法使用了 pdfTeX 中的一些东西。因此,它可能适用于其他引擎,也可能不适用于其他引擎。
基本上,这用于pagecommand
为第一页设置标签。\pdfximage
将这个值减一并添加到这个值。这用于设置自定义计数器。然后将此计数器的值与 PDF 的每个后续页面的页面计数器进行比较,如果匹配则设置结束标签。然后可以进行交叉引用。应该可以完全避免设置第二个标签的需要,但我无法让它工作,因为我无法弄清楚如何以可扩展的方式恢复 PDF 第一页的值,而不会更严重地滥用标准 LaTeX。
理想情况下,pdfpages
应该提供一个简单的键值接口来设置首页和最后一页的标签,但事实并非如此,尽管它显然是从引擎中检索相同类型的信息。因此,我重新发明了不方便的方形格式的轮子……
\begin{filecontents}{\jobname-email.tex}
\documentclass{article}
\begin{document}
1\par
\clearpage
2\par
\clearpage
3\par
\clearpage
4
\end{document}
\end{filecontents}
\documentclass{article}
\usepackage{pdfpages}
\newcounter {mypdfcounter}
\setcounter {mypdfcounter} {0}
\newcommand \textlabel[2]{#2}% no idea what this is meant to do or how it is meant to be defined
\begin{document}
\begin{flushleft}
\textlabel{Annexure 5}{email}: Email exchange \pageref{pdf:email}--\pageref{pdf:email2}
\end{flushleft}
\pdfximage {\jobname-email.pdf}
\def \makethispdfpagestyle{\setcounter{mypdfcounter}{\thepage}\addtocounter{mypdfcounter}{-1}\addtocounter{mypdfcounter}{\pdflastximagepages}\label{pdf:email}}
\makeatletter
\def \makenextpdfpagestyle{\ifnum\c@page=\c@mypdfcounter\label{pdf:email2}\fi}
\makeatother
\def \makepdfpagestyle{%
\makethispdfpagestyle
\thispagestyle{empty}%
\global\let\makethispdfpagestyle\makenextpdfpagestyle
}
\includepdf[pages={1-},scale=0.75,pagecommand=\makepdfpagestyle]{\jobname-email}
\end{document}
请注意,我不知道\textlabel{}{}
要做什么,也不知道您如何实现对 PDF 第一页的引用,因为除非您添加到列表中,否则这不是自动的。由于您没有提供任何代码,因此我对后者没有任何假设,而对前者做了一些难以置信的简单的事情。您的任何实际内容是否适用于此答案中的代码是任何人的猜测,但除了您之外没有人知道。