pdfpages/hyperref - 内容链接跳转到页面的错误部分

pdfpages/hyperref - 内容链接跳转到页面的错误部分

我正在使用 pdfpages 合并多个 pdf 文档;我还想为新文件添加一个“目录”页面,使用 hyperref 让我可以直接跳转到正确的页面。pdfpages 中的“addtotoc”选项几乎可以正常工作……由此生成的链接指向正确的页面,但比开头少了几行。有什么建议吗?下面的示例代码还显示了使用\hyperlink- 的解决方法,但此文件可能需要由不太熟悉的其他人维护/更新\LaTeX,因此自动化程度越高(即每个附加文件需要的更改越少),越好。

\documentclass{article}
\usepackage{pdfpages}
\usepackage[pdfstartview=FitH,bookmarks=true,colorlinks=true,linkcolor=blue]{hyperref}
\usepackage{bookmark}
\bookmarksetup{color=blue}
\setlength\parindent{0pt}

\begin{document}
\tableofcontents
\LARGE\hyperlink{Core1.pdf.1}{{Core 1}}\\
\LARGE\hyperlink{Core2.pdf.1}{{Core 2}}\\
\LARGE\hyperlink{Core3.pdf.1}{{Core 3}}\\
\LARGE\hyperlink{Core4.pdf.1}{{Core 4}}\
\includepdf[pages=-,link,linkfit=FitH,addtotoc={1, section, 1, Core 1, Core1}]{Core1.pdf}
\bookmark[dest=Core1.pdf.1]{Core 1}
\includepdf[pages=-,link,linkfit=FitH]{Core2.pdf}
\bookmark[dest=Core2.pdf.1]{Core 2}
\includepdf[pages=-,link,linkfit=FitH]{Core3.pdf}
\bookmark[dest=Core3.pdf.1]{Core 3}
\includepdf[pages=-,link,linkfit=FitH]{Core4.pdf}
\bookmark[dest=Core4.pdf.1]{Core 4}
\end{document}

答案1

默认使用addtotocin\includepdf会创建一个部分并将其用作锚点。该部分在文档中被定义为匿名,但在目录和书签中有一个名称。

我的一个想法是使用该addtotoc机制将条目添加到目录(以及书签)中,但超链接指向已定义的锚点而不是部分锚点,如下所示:

\documentclass{article}
\usepackage{mwe}
\usepackage{pdfpages}
\usepackage[pdfstartview=FitH,bookmarks=true,colorlinks=true,linkcolor=blue]{hyperref}
\usepackage{bookmark}
\bookmarksetup{color=blue}
\setlength\parindent{0pt}

\setcounter{errorcontextlines}{\maxdimen}

\makeatletter
\newcommand*{\@pdfpagephantomsection}[2][]{\edef\@currentHref{\AM@linkname.\AM@page}\addcontentsline{toc}{section}{\protect\numberline{}#1}}
\makeatother

\begin{document}
\tableofcontents

\includepdf[pages=-,link,linkfit=FitH,addtotoc={1, pdfpagephantomsection, 1, Core 1, example-image-a}]{example-image-a.pdf}
\includepdf[pages=-,link,linkfit=FitH,addtotoc={1, pdfpagephantomsection, 1, Core 2, example-image-b}]{example-image-b.pdf}

\end{document}

这是可行的,因为pdfpages如果命名的分段命令(以 为前缀@)不存在,则仅会为目录目的创建一个分段,否则它会使用该命令。在这里,我将其命名为pdfpagesphantomsection

请注意,我没有您指定的 PDF 文件,因此我使用mwe包中提供的文件。

答案2

您也可以简单地更改包含所包含 PDF 的页面的顶部边距。添加的锚点addtotoc将位于页面的最顶部。

newgeometry您可以使用包中的和restoregeometry命令更改文档中间的边距geometry

\documentclass{article}

\usepackage{geometry}
\usepackage{pdfpages}
\usepackage{hyperref}

\begin{document}

    % Your overview page goes here

    \newgeometry{top=0pt}  % Remove top margin
    \includepdf[addtotoc={1, section, 1, Core1, core1}]{example-image-a.pdf}
    \includepdf[addtotoc={1, section, 1, Core2, core2}]{example-image-b.pdf}
    \restoregeometry{}     % Restore original top margin
\end{document}

相关内容