我通过以下方式为项目中的所有部分添加书签:
\section{Introduction}
\hypertarget{intro}{}
Some text.
我稍后会在 URL 链接中使用这些书签https://example.com/my-document.pdf#intro
。
每次我创建指向某个部分的 URL 时,我都需要返回我的 LaTeX 项目并查找书签名称,因为我的书签太多了。我希望有一个包含所有书签的列表(最好与它们标记的部分名称并列)。
我知道可以使用以下方法生成所有书签的列表pdf信息在命令行上。但是,除了我需要的书签外,我还得到了各种由 LaTeX 添加的与我无关的其他书签:
1 [ XYZ 57 785 null ] "Doc-Start"
1 [ XYZ 56 823 null ] "page.1"
2 [ XYZ 57 711 null ] "section.1"
3 [ XYZ 57 751 null ] "intro"
5 [ XYZ 57 666 null ] "lstlisting.-1"
5 [ XYZ 104 668 null ] "lstnumber.-1.1"
6 [ XYZ 57 785 null ] "subsection.1.1"
那么,是否可以使用 生成我创建的书签列表\hypertarget
?我会对任何一种都感到满意:命令行解决方案或 LaTeX 宏。
答案1
我试着自己动手,想出了一些肮脏的但有效的解决方案感谢此主题和此主题。我希望我能想出一个更好的办法,但需要更多经验。仍然希望有人能提供更优雅的解决方案。
我的肮脏的解决方案:
\documentclass{article}
% Corrects issues with compatibility of XeLaTeX
% and hyperref to create bookmarks
\special{dvipdfmx:config C 0x0010}
\usepackage{hyperref}
\usepackage{newfloat}% for listof
\usepackage{comment}
%\begin{comment}
% temp code for list of bookmarks
\DeclareFloatingEnvironment[fileext=bkmrk]{bookmark}
\makeatletter
\newcommand*{\currentname}{\@currentlabelname}
\renewcommand*{\hypertarget}[2]{
\addcontentsline{bkmrk}{bookmark}{\currentname \qquad | \qquad #1}%
}
\makeatother
\AtBeginDocument{\listofbookmarks}
% end of temp code
%\end{comment}
\begin{document}
\newpage
\section{First Section}
\hypertarget{first}{}
\newpage
\section{Second Section}
\hypertarget{second}{}
\newpage
\section{Third Section}
\hypertarget{third}{}
\end{document}
它给了我这个:
在编译最终的 PDF 之前,我执行以下操作:
- 取消注释书签列表的代码
- 编译 PDF 以生成书签列表
- 将书签复制到 Excel 中(此步骤需要大量文本编辑)
- 注释掉书签列表的代码
然后我编译 PDF 以供发布。