为 PDF 书签添加页码

为 PDF 书签添加页码

有没有办法将页码添加到 PDF 书签中?

例子:

\documentclass{article}
\usepackage{bookmark}

\begin{document}
\section{Section the First}
This is page 1.
\newpage
This is page 2.
\newpage
\section{Section the Second}
This is page 3.
\end{document}

在此处输入图片描述

答案1

马丁·沙勒的回答是一个很好的起点。但是,异步输出例程不\thepage可靠,并且需要使用页面标签。

\documentclass{article}
\usepackage{bookmark}
\usepackage{refcount}

% Section numbers in bookmarks (more important than page numbers)
\bookmarksetup{numbered}

\makeatletter

% Unique names for internal labels
\newcount\APTB@Count
\APTB@Count=\z@
\newcommand*{\APTB@LabelName}{APTB\the\APTB@Count}

% \label is a no-op inside the hook
\AtBeginDocument{\let\APTB@Label\label}

% The hook implementation for adding page numbers to bookmarks
\newcommand*{\APTB@AddPageToBookmark}{%
  % Set label and retrieve page number.
  \begingroup
    \global\advance\APTB@Count\@ne
    \APTB@Label{\APTB@LabelName}%
    \refused{\APTB@LabelName}%
    \protected@xdef\APTB@ThePage{%
      % \thepage is used as default, then the page number is at
      % least close.
      \getrefbykeydefault{\APTB@LabelName}{page}{\thepage}%
    }%
  \endgroup
  % Add page number to bookmark
  \edef\bookmark@text{%
    \unexpanded\expandafter{\bookmark@text}%
    \space(\unexpanded\expandafter{\APTB@ThePage})%
  }%
}

% Activate bookmark hook
\bookmarksetup{addtohook={\APTB@AddPageToBookmark}}

\makeatother

% Test
\usepackage{blindtext}
\begin{document}
\Blinddocument
\end{document}

已经有一些 PDF 查看器会自动在书签中显示页码。并且可以轻松比较页码:

答案2

您可以使用addtohook选项来bookmark更改存储在书签中的文本\bookmark@text以添加页码(\thepage)。

请注意,我 100% 不确定页码是否始终正确,因为\thepage如果 TeX 需要处理大量文本才能决定分页位置,则页码可能会不正确。在这种情况下,需要内部引用才能在第二次 TeX 运行时获得正确的页码。

\documentclass{article}
\usepackage{bookmark}

\makeatletter
\bookmarksetup{addtohook={\edef\bookmark@text{\bookmark@text\space (\thepage)}}}
\makeatother

\begin{document}
\section{Section the First}
This is page 1.
\newpage
This is page 2.
\newpage
\section{Section the Second}
This is page 3.
\end{document}

相关内容