列出使用 \hypertarget 添加的指定目的地的所有书签

列出使用 \hypertarget 添加的指定目的地的所有书签

我通过以下方式为项目中的所有部分添加书签:

\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 以供发布。

相关内容