使用 hyperref 的 destlabel 选项更改命名目标

使用 hyperref 的 destlabel 选项更改命名目标

PDF 命名目标由 Hyperref 制作。 这显示了如何改变它们通过使用 hyperref 选项 destlabel=true,然后使用 /label 重新定义。不幸的是,它似乎不起作用。

答案:---这是 Lyx---(但不是解决方案)

(应该看看乳胶,我的错)。文档->设置->pdf 属性->选项PDF 首选项中的字段被放入\hypersetup{ destlabel=true},而不是\usepackage[destlabel=true]{hyperref}。正如 Heiko 最初指出的那样,这不起作用。

Lyx 的序言:

\usepackage[unicode=true,pdfusetitle,
   bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
   breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false]
{hyperref}
\hypersetup{ destlabel=true}

当我直接\usepackage[destlabel=true]{hyperref}在序言中它就起作用了。

不幸的是,lyx 加载的其他包依赖于被加载Hyperref,因此 usepackage hyperref,不能移至序言中。

因此,Lyx 序言需要的内容如下:

\usepackage[unicode=true,pdfusetitle,
   bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
   breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false,
   destlabel=true]
{hyperref}
\hypersetup{}

不幸的是,这是一个 lyx UI 变化。

有没有其他方法可以使 destlabel=true 在 hypersetup 或其他地方起作用?

答案1

有一个选项destlabel,使用锚点创建后第一个锚点的名称\label来命名锚点:

\ifx\pdfobjcompresslevel\undefined\else\pdfobjcompresslevel=0 \fi % Debug

\documentclass{article}
\usepackage[destlabel=true]{hyperref}

\begin{document}
\section{Introduction}
\label{intro}
\end{document}

第一行只是为了让 pdfLaTeX 更容易通过文本查看器(或编辑器)读取 PDF 文件,以便在 PDF 文件中查找目标名称(简而言之,/Catalog/Names/Dests)。/Dests对象引用生成的 PDF 文件中的对象 21:

21 0 obj
<<
/Names [(Doc-Start) 10 0 R (intro) 2 0 R (page.1) 9 0 R]
/Limits [(Doc-Start) (page.1)]
>>
endobj

有三个名称:Doc-Start由 添加hyperref在文档开头。page.1是自动创建的页面标签(由选项 控制pageanchor)。 的目标\section{Introduction}intro,由 命名\label{intro}

答案2

您需要destlabel=true在序言中使用,但不能使用\labelAND \HyperDestRename,即使使用标签名称代替 也不行\@currentHref

\documentclass{article}
\usepackage[destlabel=true]{hyperref}
\usepackage{lipsum}

\makeatletter
\def\hyperdest#1{\global\let#1=\@currentHref}
\makeatother

\begin{document}
\lipsum[1-5]% skip first page

\section{Introduction}
\hyperdest{\myname}
\HyperDestRename{\myname}{ExternalName}

\lipsum[6-10]

\section{Development}% new \@currentHref

\hyperlink{\myname}{test}\par\noindent
\hyperlink{ExternalName}{same target}

\end{document}

相关内容