理解 `\pdfbookmark`

理解 `\pdfbookmark`

我正在尝试理解\pdfbookmark[level]{text}{name}宏。以下是我的问题:

  1. 它是在 LaTeX 核心中定义的吗?我在哪里可以看到代码?
  2. 我在哪里可以找到该文档?
  3. 我碰巧使用了hyperref,并且hyperref.sty有这个:\newcommand\pdfbookmark[3][]{},这基本上意味着 3 个参数(1 个可选,2 个必需),空主体。这是在做什么?
  4. 是什么level

(注意:我是 LaTeX 的新手,因此,如果可能的话,我希望得到更简单的答案。)

答案1

\pdfbookmark它是一个 hyperref 命令。hyperref.sty 中的定义是虚拟的,真正的定义在各种后端文件中,例如hpdftex.def(对于 pdflatex)包含

\renewcommand\pdfbookmark[3][0]{%
  \Hy@writebookmark{}{#2}{#3.#1}{#1}{toc}%
  \hyper@anchorstart{#3.#1}\hyper@anchorend
}

级别允许在树中上下移动。使用name参数 hyperref 将创建一个目标,因此名称应该是唯一的。您必须编译该文档两次。

\documentclass{article}
\usepackage{hyperref}
\begin{document}

\section{a section bookmark}

\newpage
A\pdfbookmark[1]{text A}{targetA}

\newpage
B\pdfbookmark[2]{text B}{targetB}


\end{document}

在此处输入图片描述

如果您想要更多选项来创建书签,请使用书签包。它具有更强大的接口,并且仅需要一次编译。

答案2

根据 UlrikeFischer 的解释,我尝试了以下内容,只是为了实验。如果它对任何人有帮助,请在此处发布。并且如果用于hyperrefpdfbookmarks,请不要忘记编译两次。

\documentclass{article}
\usepackage{hyperref}
\begin{document}

\section{Section Bookmark}

\newpage
\pdfbookmark[0]{Text A}{targetA} A
\newpage
\pdfbookmark[1]{Text B}{targetB} B
\newpage
\pdfbookmark[2]{Text C}{targetC} C
\newpage
\pdfbookmark[2]{Text D}{targetD} D
\newpage
\pdfbookmark[4]{Text E}{targetE} E Skipped Level
\newpage
\pdfbookmark[3]{Text F}{targetF} F
\newpage
\pdfbookmark[1]{Text G}{targetG} G
\newpage
\pdfbookmark[2]{Text H}{targetH} H
\newpage
\pdfbookmark[0]{Text I}{targetI} I
\end{document}

hyperref 快照

包的工作原理如下bookmark

\documentclass{article}
\usepackage{bookmark}
\begin{document}
    
\section{Section Bookmark}
    
\newpage
\hypertarget{targetA}{}
\bookmark[level=0,dest=targetA]{Text A} A
\newpage
\hypertarget{targetB}{}
\bookmark[level=1,dest=targetB]{Text B} B
\newpage
\hypertarget{targetC}{}
\bookmark[level=2,dest=targetC]{Text C} C
\newpage
\hypertarget{targetD}{}
\bookmark[level=2,dest=targetD]{Text D} D
\newpage
\hypertarget{targetE}{}
\bookmark[level=4,dest=targetE]{Text E} E Skipped Level
\newpage
\hypertarget{targetF}{}
\bookmark[level=3,dest=targetF]{Text F} F
\newpage
\hypertarget{targetG}{}
\bookmark[level=1,dest=targetG]{Text G} G
\newpage
\hypertarget{targetH}{}
\bookmark[level=2,dest=targetH]{Text H} H
\newpage
\hypertarget{targetI}{}
\bookmark[level=0,dest=targetI]{Text I} I
\end{document}

书签快照

相关内容