这始于我需要在 PDF 书签中添加目录条目。完成此操作后,我决定让它始终显示大胆的(从 PDF 1.4 开始支持)。
我想用来etoolbox
实现这个功能:
\preto<hook>{<code>}
\pretocmd{<command>}{<code>}{<success>}{<failure>}
% \preto\tableofcontents{% Something like this
% \bookmarksetupnext{bold=true}
% \pdfbookmark{\contentsname}{bkm\contentsname}
% }
这样,每次\tableofcontents
调用时,都会创建一个以粗体格式的书签。
代码
\documentclass{article}
\usepackage{fontspec}
\usepackage{hyperref}
\usepackage{bookmark}
\usepackage{etoolbox}
% \preto\tableofcontents{% Something like this
% \bookmarksetupnext{bold=true}
% \pdfbookmark{\contentsname}{bkm\contentsname}
% }
\begin{document}
\tableofcontents
\clearpage
\section{Ablutophobia}
\section{Ergophobia}
\section{Nomophobia}
\end{document}
答案1
您的用法是正确的。因此,从根本上来说,您可以执行以下操作:
\documentclass{article}
\usepackage{hyperref,bookmark}
\usepackage{etoolbox}
\pretocmd\tableofcontents{%
\bookmarksetupnext{bold=true}%
\pdfbookmark{\contentsname}{bkm\contentsname}%
}{}{}
\begin{document}
\tableofcontents
\clearpage
\section{Ablutophobia}
\section{Ergophobia}
\section{Nomophobia}
\end{document}
你必须小心标记的位置。在上面的例子中,这似乎不是一个问题,因为书签中的超链接位于内容在 PDF 中开始。但是,在放置之前可能会执行一些“管理”内容,这可能会导致跳转标记和文本位置之间出现间隙。
另一种方法 - 有点老派 - 是使用
\let\oldtableofcontents\tableofcontents
\renewcommand{\tableofcontents}{%
\bookmarksetupnext{bold=true}%
\pdfbookmark{\contentsname}{bkm\contentsname}%
\oldtableofcontents
}
上面提供了类似的\pretocmd
接口,如果你不想使用etoolbox
。