我尝试使用newpax
包来生成包含所含 pdf 章节的可链接目录。但是,目录链接始终指向文档末尾。
梅威瑟:
doc-input.tex
\DocumentMetadata{uncompress}
\documentclass{article}
\usepackage{hyperref}
\hypersetup{pdfborderstyle={/S/U/W 1},
pdfauthor=Author,pdftitle=title,pdfcreator=creator}
\usepackage{kantlipsum}
\begin{document}
\makeatletter
% from \@starttoc, but without re-reading, creates toc file
\newwrite\tf@toc
\immediate\openout\tf@toc\jobname.toc\relax
\makeatother
\setcounter{section}{2} % to ensure correct section numbers
\setcounter{page}{3} % ... and page numbers
\section{Section 3}\label{sec}
See Section~\ref{sec2}\par
\kant[3-6]
\section{Section 4}\label{sec2}
\subsection{Section 4.1}\label{2-1}
\kant[8]
\section{Section 5}\label{sec3}
\kant[9]
\end{document}
doc-input.tex
经过 lualatex 处理后得到一个 pdf。此 pdf 包含在doc-use-newpax.tex
:
\DocumentMetadata{uncompress}
\documentclass{scrarticle}
\usepackage{pdfpages,xcolor}
\usepackage{hyperref}
\hypersetup{linkbordercolor=blue}
\usepackage{kantlipsum}
\makeatletter
\input{doc-input.aux}
\makeatother
\usepackage{newpax}
\directlua
{
require("newpax")
newpax.writenewpax("doc-input")
}
\begin{document}
\tableofcontents
\section{Main}
\kant[1-3]
\section{Next}
\kant[4]
\addtocontents{toc}{\string\input{doc-input.toc}}
\includepdf[pages=-]{doc-input}
\setcounter{section}{5}
\section{Last}
\kant[5-7]
\end{document}
结果我得到了一个带有视觉上正确的目录的 PDF。但是,指向嵌入 PDF 的目录链接总是跳转到文档末尾。我想我漏掉了一个重要点。我怎样才能获得正确的链接?
附言:我知道这个addtotoc
选项,\includepdf
但是它只提供了页面,而不是正确的锚点。
答案1
我已将新版本 (0.54) 上传到 ctan。它现在存储目的地的名称(如果目的地有名称,如果 PDF 不是由 (La)TeX 创建或由 ghostscript 更改,则无需如此!)。使用它,以下工作正常:
\DocumentMetadata{}
\documentclass{scrarticle}
\usepackage{pdfpages,xcolor}
\usepackage{hyperref}
\hypersetup{linkbordercolor=blue}
\usepackage{kantlipsum}
\makeatletter
\input{doc-input.aux}
\makeatother
\usepackage{newpax}
\directlua
{
require("newpax")
newpax.writenewpax("doc-input")
}
\newpaxsetup{dests=all} %force import of all destinations
% a helper command to make the change in the toc easier ...
\NewDocumentCommand\setdestfilter{mm}%
{\def\HyperDestNameFilter##1{#1##1#2}}
\begin{document}
\tableofcontents
\section{Main}
\kant[1-3]
\section{Next}
\kant[4]
% the destinations of the included PDF have the prefix `doc-input.newpax@`:
\addtocontents{toc}{\setdestfilter{doc-input.newpax@}{}}
\addtocontents{toc}{\string\input{doc-input.toc}}
\addtocontents{toc}{\setdestfilter{}{}}
\includepdf[pages=-]{doc-input}
\setcounter{section}{5}
\section{Last}
\kant[5-7]
\end{document}
附注:我把这个uncompress
选项植入到\DocumentMetadata
任何地方,因为我需要它来进行调试,但普通文档不应该使用它。它会使 PDF 变得非常大...