使用导航器引用嵌入文件的名称和描述

使用导航器引用嵌入文件的名称和描述

我想将多个文件附加到文档中,并根据它们所属的图形、表格等命名。我使用包navigator来执行此操作,但无法使其正常工作。

我想要的是:

\documentclass{article}

\usepackage{hyperref}
\usepackage{navigator}

\begin{filecontents*}[overwrite]{attachment.txt}
This is an attachment
\end{filecontents*}

\begin{document}
\section{Section 1}
\label{section1}
\embeddedfile[Attachment for Section \ref{section1}]{attachment}[Section\ref{section1}.txt]{./attachment.txt}
\end{document}

如果我运行此程序而不包含包hyperref,它会在第二次运行时运行,大概是因为需要先创建引用。但是,文件名和描述中的引用被呈现为“Section 1hbox{}”。
如果我包含hyperref包,则什么都不起作用,并且我会得到以下行的错误\embeddedfile

! Argument of \@sect has an extra }.
! Paragraph ended before \@sect was complete.

答案1

我不会navigator与一起使用hyperref。这两个包都试图处理一组非常相似的 PDF 功能,并且在许多地方它们会发生冲突,例如两者都写入目录和信息字典。

如果您想使用导航器将其用于所有事情,但请注意,它缺少一个重要功能hyperref:它没有等效于\pdfstringdef将 TeX 输入转换为 PDF 字符串中安全内容的功能。

这会导致错误:\ref 是一个相当复杂的命令,但navigator要求描述和备用文件名是简单的,可以通过 来处理\pdfescapestring。使用\pdfstringdef不起作用,因为描述被转义了两次。

使用 embedfile 而不是 navigator,您的示例可以像这样完成(这里也需要避免在 filespec 中使用 \ref)。

\documentclass{article}

\usepackage{hyperref}
\usepackage{zref-user}
\usepackage{embedfile}

\begin{filecontents*}{attachment.txt}
This is an attachment
\end{filecontents*}
\makeatletter
\newcommand\expref[1]{\zref@extract{#1}{default}}
\makeatother
\begin{document}
\section{Section 1}
\label{section1}\zlabel{section1}

\embedfile [filespec=Section\expref{section1}.txt,
desc=Attachment for Section \expref{section1}]{attachment.txt}

\end{document}

相关内容