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
在序言中使用,但不能使用\label
AND \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}