我想将多个文件附加到文档中,并根据它们所属的图形、表格等命名。我使用包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}