我有一个包含\section*
和 的大型文档\section
。我希望所有部分都显示在书签中。我正在使用hyperref
和bookmark
包。我知道这\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}
一些说明:
titlesec
hyperref
由于与它不兼容,因此未使用包,请参阅hyperref
手动的,第 9.1.38 节。- 可以调整上述代码,为低于的分段命令添加书签
\section*
,例如\subsection*
和\subsubsection*
。 - 一旦
\section*
创建书签,以下(编号)\subsection
将在 的书签下创建书签\section*
。