使用 newpax 制作目录

使用 newpax 制作目录

我尝试使用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 变得非常大...

相关内容