答案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}