我有这个:
\label{appendix:b}
\includepdf[scale=0.8,pages=1,pagecommand=\chapter{interview}]{interview/interview}
\includepdf[scale=0.8,pages=2-,pagecommand={}]{interview/interview}
\label{appendix:bslut}
我用 cleveref 来调用它:
\cpagerefrange{appendix:b}{appendix:bslut}
问题是我得到了错误的页码,最后一页被加了一页。应该是“第 1-5 页”,但实际上是“第 1-6 页”。我疯狂地在 Google 上搜索,但不知道该怎么办。希望这里的一些超级明星能帮上忙!我按照建议在 hyperref 之后使用了 cleveref...
编辑:根据要求,我尝试制作 MWE,但由于某种原因,它给了我:
LaTeX Warning: Reference `appendix:bslut' on page 1 undefined on input line 7.
不过,它在这里。“多页”应该是跨越多页的 PDF。
\documentclass{memoir}
\usepackage{pdfpages}
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\chapter{Foo}
Foo\cpagerefrange{appendix:b}{appendix:bslut}.
\chapter{Bar}
\label{appendix:b}
\includepdf[scale=0.8,pages=1,pagecommand=\chapter{Multipage}]{multipage}
\includepdf[scale=0.8,pages=2-,pagecommand={}]{multipage}
\label{appendix:bslut}
\end{document}
答案1
以下代码获取所包含 PDF 第一页的章节标题并启用正确的页面引用。mypages
是一个 16 页的 PDF,仅用于演示目的。
\documentclass{memoir}
\usepackage{pdfpages}
\usepackage{hyperref}
\usepackage{cleveref}
\makeatletter
\newcommand\incpdfchapter{%
\ifartopt\par\@nameuse{chapterblock}\else
\thispagestyle{chapter}
\global\@topnum\z@
\fi
\m@mindentafterchapter
\@ifstar{\@m@mschapter}{\@m@mchapter}}
\makeatother
\begin{document}
\chapter{Foo}
Foo\cpagerefrange{appendix:b}{appendix:bslut}.
\chapter{Bar}
\clearforchapter
\includepdf[scale=0.8,pages=1,pagecommand=\incpdfchapter{Multipage}\label{appendix:b}]{mypages}
\includepdf[scale=0.8,pages=2-15,pagecommand={}]{mypages}
\includepdf[scale=0.8,pages=16,pagecommand={}\label{appendix:bslut}]{mypages}
\end{document}
如果您希望采用更加自动化的解决方案,但牺牲指定标签的灵活性,您可以尝试以下方法:
\documentclass{memoir}
\usepackage{pdfpages}
\usepackage{hyperref}
\usepackage{cleveref}
\usepackage{xparse}
\makeatletter
\newcommand\incpdfchapter{%
\ifartopt\par\@nameuse{chapterblock}\else
\thispagestyle{chapter}
\global\@topnum\z@
\fi
\m@mindentafterchapter
\@ifstar{\@m@mschapter}{\@m@mchapter}}
\newcounter{incpdfpages}
\NewDocumentCommand\myincpdf{ d<> O {} m m }{%
\clearforchapter
\IfNoValueTF{#1}{%
\def\incpdflabel{#3}}{%
\def\incpdflabel{#1}}
\includepdf[#2, pages=1, pagecommand=\incpdfchapter{#3}\label{\incpdflabel}]{#4}%
\setcounter{incpdfpages}{1}%
\includepdf[#2, pages=2-, pagecommand=\refstepcounter{incpdfpages}\label{\incpdflabel:\theincpdfpages}]{#4}%
}
\NewDocumentCommand\mysingpdf{ d<> O {} m m }{%
\clearforchapter
\IfNoValueTF{#1}{%
\def\incpdflabel{#3}}{%
\def\incpdflabel{#1}}
\includepdf[#2, pages=1, pagecommand=\incpdfchapter{#3}\label{\incpdflabel}]{#4}%
}
\makeatother
\begin{document}
\chapter{Foo}
Foo\cpagerefrange{appendix:b}{appendix:b:16}. Here is a reference to \cpageref{appendix:c}.
\chapter{Bar}
\myincpdf<appendix:b>[scale=0.8]{My Pages}{mypages}
\mysingpdf<appendix:c>[scale=0.8]{My Other Page}{mygraphics}
\end{document}
再次,mypages.pdf
假设为 16 页 PDF。该命令\myincpdf<>[]{}{}
需要 2 个可选参数和 2 个强制参数。
- 第一个可选参数使用 指定
<>
,应该是您要用于所包含 PDF 第一页的标签。后续页面的标签是通过附加原始 PDF 中的页码来:n
从此标签构建的。例如,如果 PDF 有 16 页,则最后一页将获得您为第一页指定的标签。如果您未指定标签,它将被设置为章节标题的值。(如果章节标题包含标签中不起作用的字符,请注意不要未设置标签。)n
baselabel:16
baselabel
- 第二个可选参数使用 指定
[]
。包括您想要传递到\includepdf
这里的任何额外选项。 - 第一个强制参数应该指定章节的标题。
- 第二个强制参数应该提供要包含的 PDF 文件。
显然,这并没有经过真正的测试。我检查过它是否适用于我的示例以及我省略可选参数的情况,但仅此而已。买者自负。
编辑:我已经更新了代码,以回答评论中有关单页 PDF 的问题。\mysingpdf
就像\myincpdf
但它只包含 PDF 的第一页。对于单页文档或仅希望包含第一页的情况,请使用此命令。