如何在不手动插入 pdfbookmark 的情况下为带星号的部分添加书签?

如何在不手动插入 pdfbookmark 的情况下为带星号的部分添加书签?

我有一个包含\section*和 的大型文档\section。我希望所有部分都显示在书签中。我正在使用hyperrefbookmark包。我知道这\currentpdfbookmark可以做到这一点,但我不想编辑包含所有文本的主文件,因为我习惯subfiles使用同一个文件以不同的布局进行输出。

答案1

尝试这个:

\documentclass{article}
\usepackage{bookmark}
\usepackage{xpatch}


\makeatletter
% store current section level
\xpretocmd\@startsection
  {\def\@currentseclevel{#2}}
  {}{\fail}

% add bookmark for \section*
\xapptocmd\H@old@ssect
  {\@addbookmark}
  {}{\fail}


\def\@addbookmark{%
  % after starred section, \@currentHref has form "section*.<num>"
  \expandafter\@add@bookmark\@currentHref\@nil
}


\def\@add@bookmark#1.#2\@nil{%
  \in@{*}{#1}%
  \ifin@
    % current section is a starred section
    \ifnum\@currentseclevel=1\relax
      % add bookmark for \section* only (level 1)
      \edef\@tempa{\noexpand\bookmark[dest=\@currentHref, level=\@currentseclevel]{\@currentlabelname}}%
      \@tempa
    \fi
  \fi
}
\makeatother

\begin{document}
\section{Numbered section}
\section*{Starred section}

\subsection{Numbered subsection}
% \subsection* does not create bookmark
\subsection*{Starred subsection}

\end{document}

一些说明:

  • titlesechyperref由于与它不兼容,因此未使用包,请参阅hyperref手动的,第 9.1.38 节。
  • 可以调整上述代码,为低于的分段命令添加书签\section*,例如\subsection*\subsubsection*
  • 一旦\section*创建书签,以下(编号)\subsection将在 的书签下创建书签\section*

相关内容